для поиска модулей и т.д. используйте compillerpass для dependency injection container. Оно будет запускаться при вармапе кэша и ненужно будет этих штук с проверкой на существование файла. Собственно это все что за вас может сделать symfony. Остальное это общепринятые практики, SOLID и т.д. Всю логику разнести по сервисам... Попробуйте раскрыть свой вопрос чуть подробнее, в чем именно затык, в чем именно вы не уверены и т.д.
Вы смотрели как организована в симфони система бандлов? Может вам именно это нужно?