The root cause is that in the code path when cljs.main executes a script, it uses the ensure macro, which ends up establishing a compiler environment that isn't set up for Node—set up using (cljs.env/default-compiler-env). If an opts map is passed to cljs.env/default-compiler-env which contains :target :nodejs entry, then the desired native Node modules, in cljs.js-deps/native-node-modules will be included.
The fix is to instead of using ensure, either use with-compiler-env or to just bind *compiler* to one set up using the right opts. The attached patch looks much larger than it really is, owing to a lot of whitespace change produced by removing an outermost ensure wrapper. It removes the ensure and simply adds env/*compiler* (env/default-compiler-env opts) to the binding list.
I checked that the patch also works in the case of using cljs.main to compile code using 'fs. A CLI test is added ensuring that you can use native modules in -e forms, which is roughly analogous to what happens when running a script. (I also checked tat this new CLI test fails if you don't include the production code change.)