Любые модули в js сделаны на замыканиях, поэтому и не видят переменные и функции друг друга
Главная задача, которую решают модули - как раз таки разграничение области видимости.
В node.js встроена модульная система CommonJS, вот ее основы:
1) Модули подключаются синхронно и отрабатывают 1 раз за время жизни приложения, после результат кэшируется
2) В качестве результата работы модуля используется значение module.exports, которое модуль может изменять
3) Если присвоить в module.exports новое значение, после того как модуль отработал - это никак не отразится на внешних подключениях модуля, однако если module.exports объект, можно менять поля этого объекта
4) По умолчанию module.exports содержит новый пустой объект, ссылка на этот объект содержится так же в переменной exports