It still seems like a mature programming environment would exhibit more obvious behaviour. Like force evaluate all unevaluated code before exit. Or have a warning if the code you run will not actually do anything.
Nevertheless, doseq is what I was looking for in my particular case. My original workaround was to just use loop and recur since for and map were not producing side effects. But doseq is closer to the syntax I wanted.