Есть ли какие-то «особенности» у node.js require?
Никаких утечек самого require не будет. Но беда в Вашем подходе следующего характера. require синхронный. Вы используете синхронный метод в асинхронной функции - это, в принципе плохо. Все вызовы require необходимо поместить в начало модуля, чтобы они были вызваны при загрузке модуля. Почитайте про хорошие практики по node.js в том числе и на Хабре. Вывод простой - синхронный код - зло.
Память течь не должна, @virpool прав. Я бы не рекомендовал использовать requirejs для ноды - он сильно усложняет отладку (когда действительно потребуется искать утечки памяти).