My general (perhaps wrong) impression is that other languages commonly used in backends are moving toward async io, usually through maturing libraries.
It's true that other languages add async models (or emphasize those that they already have), but eg. in the case of Java you're sitting on 20 years of synchronous library and custom code, and it's not clear moving to async is worth it at this pont.
Many of the applications people think of for node.js end up being "glue", much like python, and can live within this constraint for a very long time, where the I/O optimization is a nice benefit.
Node.js is garbage (well, good for simple crud apps) and so is JS.
That being said, I do like how C# handles it more than the way JS has handled it, but both are fantastic.
You can say JS is "garbage" all you want, but it's close to the most popular language on the planet and many many people are writing great things because of it.
Rate limiting is not hard either way, but single-threaded async is slightly easier because your counter is automatically thread safe.
The larger and more complex your system gets the harder it gets to keep it thread-safe. For me this is the big advantage of single-threaded async, and I like node because this single-threaded async is idiomatic in JavaScript.