Начните с написания регрессионных тестов, чтобы быть уверенным, что вы не сломаете слишком много при рефакторинге.
Выясните, где и как используются определенные переменные. Добавьте комментарии. Дайте этим глобальным переменным лучшие имена, если у них еще нет, и убедитесь, что одна и та же переменная не используется для разных целей.
Затем начните заменять использование глобальных переменных явной передачей параметров и явными возвращаемыми значениями. Это уменьшит проблемы временной связи, которые вы показали в вопросе.
Если вы заметили, что некоторые ваши функции имеют слишком много параметров, определите параметры, которые всегда передаются группой, создайте из них структуру данных, чтобы можно было передавать их вместе. Убедитесь, что эта структура данных остается полезной абстракцией.
Если вы найдете определенные операции, которые работают в основном только с этими структурами данных, преобразуйте структуру данных в класс и реализуйте эти операции как функции-члены.
... (длинный список других вещей, чтобы сделать код более удобным для обслуживания) ...
Наверняка есть еще много вещей, которые можно улучшить со временем. Канонической рекомендацией является приобретение копии книги Working Effectively with Legacy Code , которая также является главной рекомендацией в этом посте SE 10-летней давности.
P.S.: did you notice - I did not even mention Node.js or Javascript in my answer. Your issues with global variables, temporal coupling or bad code are mostly language agnostic.
Прикрепляю к посту несколько видео по теме: