Используйте SPA:
1. каркас (начальная страница, роутер и необходимые js),
2. визуальная сетка разметки с place-holder'ами с доступом через ID.
3. реестр обработчиков объектов (помещаемых в эти place-holder'ы).
Собирайте разметку страницы по-частям из отдельных блоков динамически:
https://github.com/xmoonlight/includeHTML
Каждая унифицированная HTML-часть - должна быть снабжена своим обработчиком событий, который должен быть динамически подгружен по-необходимости (если их немного - можно сразу загрузить все при загрузке SPA).
По клику - грузите нужный блок в нужный place-holder (или обновляете)
Для быстрого доступа к рендерингу (обновлению) данных - используйте jquery.
Интерфейсный цикл такой:
Событие->Обработка (расчет/ajax)->Обновление визуализации (если необходимо)->Расстановка значений в поля (через callback) -> Отображение