>> How can you fix [X] without breaking almost all existing [Y] code?
For most cases of X, some form of declaration that is scope bound.
Look at e.g. Perl, it changes quickly in this way, with very good backwards compatibility. [Also see strict mode, of course.]
Edit: That said, new keywords like those let/const/module/extends etc should work fine. Please give me them today.
Edit 2: I have been cursing the lack of multiple returns this week. It is a pain returning a hash/object or an array. That really isn't supported, from browsing the standard? :-(