Зависнет не скрипт, а браузер клиента. И если висеть он будет более 3-х секунд, есть вероятность, что страницу закроют и больше уже не откроют по идеологическим причинам. Никогда не пользуйтесь синхронными методами в асинхронной системе - плохие последствия. К тому же, Вы не сможете найти каких-то веских причин для "оправдания" перед коллегами по цеху.
Никаких утечек самого require не будет. Но беда в Вашем подходе следующего характера. require синхронный. Вы используете синхронный метод в асинхронной функции - это, в принципе плохо. Все вызовы require необходимо поместить в начало модуля, чтобы они были вызваны при загрузке модуля. Почитайте про хорошие практики по node.js в том числе и на Хабре. Вывод простой - синхронный код - зло.
d3js.org. Если не нужно поддержки IE8 и меньше. Raphaël и D3 — обёртки над SVG. Не забывайте, что SVG — это DOM со всеми вытекающими. Canvas быстрее — но это растровая графика.
expressjs самое оно. Пользуюсь давно. Для новичка в самый раз. Он очень расширяемый. Вряд ли у Вас найдётся задача, которая не решена расширениями (т.н. middleware).