I think a lot of these grievances, substantial or no, are addressed pretty well in Clojure. Early return comes to mind. I do it all the time in the form of a loop macro "spitting out" a value instead of recurring. I know I felt more handcuffed in other functional languages, where I had to get weird to do what I wanted...but I don't think it has to be this way.