I'll be talking exclusively about Node.js as I don't have any experience with Rhino. The main difference would be the environment they run in. Rhino runs on the JVM and V8 (Node.js) is merely a compiler to native code not an interpreter.
You could say that Node.js is build around the asynchronous model and it's 3rd party model system are purely asynchronous (albeit some exceptions where they specifically state what's synchronous or when they give both asynchronous and synchronous methods).
There's lot of library fragmentation in other languages. Fragmentation is async vs sync and module systems. Node.js has arguably one module system: NPM. This creates standardization around 3rd party module.
There are many advantages to running Node.js:
- You can share code between the client and server-side
- Running on-top of V8 (which is extremely fast)
- Asynchronous model (a ton of compatible modules to help you)
As to the questions in the comments (talking about distributed architecture)....
- If you want to write high performance, CPU-bound tasks in C++, why not write native modules?
Most of the time you'd want to write these systems independently from Node.js. The purpose of a distributed architecture is:
- Fault Tolerant (If a failure happens in a single system, it's much easier to replace them.)
- Modular (You'd write smaller systems with a defined scope. You can also replace the inner workings of each system and everything will still work)
- High Performance 
 When you're building high-performance systems you don't need it to be bound to Node.js or the V8 engine as working under v8 and node.js requires additional knowledge and is much much harder to debug as you complicate the layer even more.
THe last part might be a tad out-of-scope but I'll leave it in for now.