It appears that rosrun just passes all arguments through to the executable in question. Rospy modules have a built-in step that strips all arguments containing the "remapping" string ":=" and sends them to the parameter server namespaced under the parent node's name. The relevant code is here.
rosnodejs does not currently pass any privately scoped parameters up to the parameter server. Command line arguments are parsed here, and only ROS_IP/related arguments are dealt with in netutils, and the only other code that deals with remappings is in Names.js, which explicitly ignores any remappings that start with an underscore. This is likely due to the fact that properly parsing parameter types must be done using YAML syntax, and a YAML parser for rosnodejs would introduce another dependency and be a PITA to maintain.
I'll figure out how to do what I want without private parameters I guess.
After a bit more research, it would appear to me that there is not feature parity between rospy and rosnodejs. rosnodejs does not appear to handle commandline parameters as of this time and this may be impossible to support.