Посоветую создать "дерево" различий между шаблонами: вверху - самые сложные и кардинально-отличающиеся функции (различная компоновка, анимация, тематика и т.д.), ниже - уже не сильно отличающиеся, но специфичные, исходя из верхних.
Затем - реализовать это "дерево" на кусках HTML/JS, чтобы можно было собирать любой набор.
Для такого конструктора - я посоветовал бы
includeHTML (сам его делал для этих же целей).