The design of it is a mess.
I don't believe it is. I can point to bigger messes. For example Perl, Python, C++.
It is one hundred percent an event driven programming model. Ideal for those mouse click handlers in browsers. Turns out to also be idea for event driven handling of all kind of connections to sockets, serial ports, databases, etc.
That event driven model is especially useful when you have to juggle many connections to sockets, databases, serial ports etc in node.js. Makes programming it all much easier than using threads and some thread library.
It's efficient when you have thousands of connections and transactions in flight at the same time.
Sure it's dynamically typed. As are many scripting languages.
Sure it has some weird type coercions. But then so does C and C++ where they are likely more dangerous.
Memory in C++ is a leaky abstraction .