На уровне проектирования собственной CMS, тем более модульной, уже требуется переходить с банального "инклюдим файлы из папочки с модулями" на что-то посерьёзнее, а это требует и хорошего понимания самого PHP, и хорошего понимания ООП в целом: паттерны, инкапсуляция, наследование, полиморфизм, корректное использование замыканий и так далее. Лично я вижу два возможных пути развития в этом направлении:
1) От практики к теории, то есть найти какой-то популярный фреймворк, расковырять его, посмотреть, как он устроен, и разобраться/спросить, почему он устроен именно так, а не иначе;
2) От теории к практике: почитать про программную архитектуру (хотя бы книжку "банды четырёх" про паттерны и какие-то базовые вещи из Фаулера), продумать архитектуру своей CMS и начать думать, как это правильно закодить.
Единственно правильного ответа на вопрос "как организовать модульность" не существует, есть разные подходы со своими плюсами и минусами. В качестве самого базового можно рассматривать паттерн
Наблюдатель (в php традиционно реализуется через
SplObserver, а одна из самых популярных его реализаций - система
Event Dispatcher из Symfony). Про разные способы его воплощения в коде можно почитать
вот здесь.