как вариант:
- перед стартом запоминаешь загруженные модули
- запускаешь свои (циклом из особой папочки), обнаруживаешь те модули, что появились - их надо будет выгружать
(+ аналогично стартуешь файберы и прикапываешь их имена для остановки)
при обновлении:
- обнуляешь модули в глобальном пространстве имен, куда их сунул ради вызова функций
- останавливаешь прикопанные файберы
- чистишь package.loaded от запомненных своих модулей
- стартуешь всё взад
Мне кажется, что можно сделать обобщенный механизм (на основе фиксированного дерева проекта). Но раз его нет, значит он не такой уж и универсальный, и каждый предпочитает свой велосипед.