To this day, I think only the efficiency problem has been solved. That is unsurprising, since compilation and optimization is an implementation detail that doesn't affect what code users are allowed to write, and JS engines have improved performance enormously during the 3 decades of the existence of JS.
However, the lack of foundational elements and the insufficient amount of thought given to the aforementioned issues at the birth of the language make it very hard to bolt such features onto it after the fact. It has nevertheless been done, e.g.: JS now has a module system – at least three of them, just to make life easier (and bundlers existed even before those attempts); traditional class-based inheritance was added as a redundant way of writing OO code in addition to prototypal inheritance; package managers aren't lacking either (there is NPM but also Yarn); type systems for JS and typed languages compiling to JS have been devised (TypeScript, CoffeeScript, Elm, even C and C++ via Emscripten, Dart, Flow, PureScript, just to mention a few).