Spa, как один html документ и просто скрывал/показывал нужные секции
Это костыль, хотя как известно костыли бывают вполне работоспособны. Проблема в том, что подобный код крайне геморройно писать совместно и поддержка - беда.
Верный метод, это когда у тебя все приложение разбито по модулям и перед отправкой клиенту собирается в единый файл. Например если все скопом компилируется в один JS, типа
React или
Vue.
Либо вариант, когда компоненты динамически подгружаются по мере необходимости. Например
PJAX.