Я работаю над чем-то похожим и реализовал обмен, как вы (3-й вариант), и он работал нормально.
Я пытался реализовать фронт-контроллер для обработки раздела администратора, запускать модули с помощью модулей HMVC :: run () и буферизовать вывод, как мне хочется, но затем я столкнулся с другой проблемой, вам придется изменить URI схемы от / до _ или что-то еще, поскольку вы не сможете отправить сегменты модуля в качестве параметра на ваш контроллер, потому что CI полагается на "/" для механизма маршрутизации.
Единственный способ - эмулировать раздел администратора, как предложил Фил, но есть еще один вариант - контролировать код, реализованный любым, кто использует вашу CMS.
Вы можете расширить CI_Controller (или MX_Controller, если вы используете HMVC) и добавить Admin_Controller, который будет обрабатывать вашу логику и контролировать, что могут делать модули.
Посмотрите на это Базовые классы CodeIgniter: СУХОЙ