I'm sure there's one other language out there that does it too but I don't know what it is.
Event based programming effectively means that as long as it has something to do it's doing it. You tell it to wait? It says great I've got all this other stuff to do.
Streams you may have me there, I didn't realise those were so widely used in other languages. Javascript works pretty well because you can run it on the whole stack. Share code between the front and back end. Stream from one place to another and around the corner.
It also allows you to mix in worker threads that are allowed to block (for I/O, for example).
You can develop in JavaScript, Java, Ruby, Ceylon, Groovy.
It's fast, async and robust.
That means that if you are using a 3rd party library, it will be async from the start.
In something like python you need to work to get a fully async app, but in node you should file bugs if something blocks on IO.
As you've pointed out some of these libraries make things behave a lot more similarly to other languages. And in such a case you may be better off just using one of them. However you're giving up on a lot of the power and benefits javascript provides, so of course you'd want to use something else.
For all of its pitfalls and annoyances, javascript is too powerful a language to ignore. Asynchronous operations and streams are just too good. They are difficult to balance but once mastered you can really do a lot with them.
My recommendation would be to skip libraries where possible. Use raw ES6, or Typescript. Something javascript has been suffering from for a long time is bloat from external libraries. You don't really need to use them, especially now that the language has more or less settled down.
All of the best libraries were used to normalise things and that's not really needed anymore.