Dzisiaj aplikacje projektuje się najczęściej jako zupełnie niezależne API (np. Java, .NET, PHP) i front-end (vanillaJS, Angular, React, Vue).
Ma to wiele plusów, a do najważniejszych należy całkowite odseparowanie programistów API i frontu. API wysyla do fronta np. JSONa z danymi, front wcześniej odpytuje back-end o te dane i potem je odpowiednio wyświetla. Back-end nie interesuje się co się dzieje z danymi, jego zadaniem jest ich pozyskanie (np. z bazy) i wysłanie w świat. Front natomiast nie interesuje się skąd są dane (baza własna, chmura, pliki itp.) tylko obrabia czystego JSONa.
Co do tego braku JS to nie dramatyzowałbym tak w dzisiejszych czasach (oby Comandeer tu nie wszedł :p) ale ten problem można częściowo rozwiązać poprzez tzw. Server Side Rendering w przypadku frameworków jak Angular, React i pewnie Vue też ma coś dedykowanego do tego.
Dodatkowo warto pomyśleć nad aplikacją PWA i odpowiednio skonfigurować cachowanie w Service Worker, w tym również w razie potrzeby cachowanie danych z API.
Dużo zależy od konkretnego przypadku, zawsze technologię dobiera się do problemu, a nie odwrotnie.