1. В git есть система подпроектов, но как-то она не работает интуитивно понятным способом и не автоматически. Про подпроекты надо не забывать. Они сами не коммитятся.
2. Можно использовать сборку (например, grunt). Мне этот вариант кажется более предпочтительным, хоть это и не git. Вы в одном проекте git сможете иметь несколько подпроектов, хранить все в одном репозитории, и для выпуска собирать тот, который вам нужен.
3. Выделит ваше ядро как проект для bower, положить его на ресурс (gitlab/github). Обновление версий ядра в проектах вести соответственно через bower. Тогда проекты для сайтов можно держать в двух раздельных репозиториях 1 и 2. (итого у вас будет три репозитория. 3-й - для ядра). И даже смена ядра не будет сильно отражаться на проектах независимо от изменений в ядре, как это было бы в первых двух вариантах, где бы вам приходилось согласовывать все подпроекты при изменении версии ядра и это было бы самой неприятной работой, что-то менять, когда 1-й проект уже сдан (т.е. если вы поменяли версию ядра, то и обновлять надо сразу все проекты, а с bower такого не будет). - Мне кажется этот вариант вообще идеальный! - я за этот вариант. Связь между репозиториями такая: