Ответ достаточно простой — дело в том что Ваш код в принципе не вызывается.
Когда Вы выполняете функцию в ТЕКУЩЕМ контексте — то конвеер ноды (V8) занят выполнением Вашей функции — скажем например — function foo()
Вы пытаетесь создать объект jsdom НО результат метода env является асинхронным, поэтому он будет добавлен в стэк будущих вызовов, НО т.к. в текущем контексте функция foo еще не завершилось, то планировщик НЕ может перейти к другому заданию.
Например у Mozilla Rhino нет такой проблемы благодаря Java основе, но в V8 модель потоков исключительно однопоточная в рамках контекста.
Решение: попробуйте вызывать каждую интерацию через setTimeout или process.nextTick (хотя конечно этот метод будет скоро deprecated) тогда Вы получите сильно загруженный конвеер, однако у Вас будут работать асинхронные события.
P.S. при бесконечном заполнении стэка вызовов при количестве возвратов более чем 50000 нода скорее всего упадет, поэтому не забывайте контролировать рост очереди вручную.