Мне кажется, что тут более правильный подход — branch by architecture.
Т. е. вы реализуете в проекте IoC и включаете/отключаете нужную функциональность через конкретные конфиги для каждого клиента.
Кодовая база при этом для всех одна.
Рефакторинг может оказаться достаточно дорогим, но, ИМХО, branch hell — это еще дороже, если клиентов много.