And you know what "for (x) in Y {;;some more code here}" means the same way you know what "x= someFunc(a,b,c)" means. You look it up. Of course it is best if the developer uses good names and comments so you can make a good guess by looking at it.
Yea it's hard, and yea it's dangerous. All powerful things are. I don't like being told I can't have something because you think I am too stupid to use it safely. Some people won't be able to use it, and everyone at one point will be too inexperienced to use it correctly. But thats why you layer the more common languages on top. And if you are running an enterprise shop where you can't guarantee the quality of the maintenance developers, don't let your developers use it. etc...
Because it's too powerful is not a very convincing argument for me.
.Net shows what we have needed for a long time. A consistent development platform where it doesn't really matter what language you program in. Everything gets compiled down the same way, everyone uses the same API and libraries. But the syntax is locked away and guarded (big surprise coming from a monopolist). You can't easily find it, and you sure as hell can't easily change it. And even if you do, the byte-code doesn't offer any more power than the over-language. All you can do is beg for a change, and maybe a year later you will get a watered down version.
Free us from our syntax chains.
You've gone on at length about how cool Lisp is. How it can be morphed into whatever language is needed at the time. So prove it. Fix .Net by describing the language syntax in Lisp. Give the end programmer the ability to see and adjust their chosen language to behave as needed on a project by project basis. And do it in a way that will actually get used.
Instead of making a 100 year language, make a 100 year platform where the language can shift as the problems and fads do. It won't be easy, but it might just change the world.