Как правильно вести разработку нескольких веток в git?
Это принципиально не корректная идея использования репозитория. В данном случае надо иметь отдельный репозиторий с ядром и несколько репозиториев с доп. функционалом. То есть 1 проект = 1 репозиторий.

Соединять репозитории можно либо через git modules (но мне не нравится этот способ), либо же любым удобным пакетным менеджером, например, тот же npm.

Ветки нужны только для временной разработки и последующего вливания в мастер
Можно и не разделять код из репозитория по веткам. Концептуально звучит, что это модули зависимые от ядра. В мастере будут соседствовать все 4 модуля (включая ядро). Идея в том, что ядро проекта обычно надо держать в наиболее актуальном состоянии и только путем хранения по соседству этого можно добиться без проблем.

Решение через submodules потребует создания 3-х дополнительных репозиториев, а наличие отдельных веток может мешать, так как есть возможность забывать делать merge или cherry-pick изменений из мастера с ядром.

Также, master -- это то, что разработчик смотрит как наиболее свежий рабочий код (возможно не стабильный, но все же). Если у Вас там будет только ядро, это может вызвать непонимание, где взять модули. В таком случае рекомендую четко описать в документации Вашу схему работы с репозиторием.