Is perfectly valid groovy, spread on multiple lines with no semicolons.
You seem to be making this out like its some huge inconvenience. It is very rarely an issue and its not like there are 5000 things you can't do. Its really just line breaks in statements that aren't delimited any other way that are effected and all you have to do it put the operator on the line prior to the break...
You're right about statements being expressions and returning the last executed expression. In fact, since using Clojure I've gotten used to these, e.g.
(-> (Foo 50) (Bar))
(def x (if (> i j) 5 6))
I do miss the static typing and more readable syntax, though, and have appreciated Haskell in this regard. Too bad things like powerful macros and convenient syntax don't seem to gel together well in the same language.