Ja pracuję na co dzień w React, style ładowane per komponent (masz wtedy w stylach przestrzenie nazw chociażby) + ogólne reguły typu normalize.css. Piszesz w JSX i generujesz sobie DOM. Plusy tego podejścia są takie, że masz w jednym pliku JS i "HTML" i nie musisz skakać, przełączać się między kontekstami, co w przypadku złożonych komponentów zabiera sporo czasu. Do tego możesz ogółem pisać CSS w JS, wtedy już w ogóle bajka jak dla mnie (nie każdemu to się podoba, ale warto się zapoznać: https://speakerdeck.com/vjeux/react-css-in-js). Łatwiej się też testuje takie izolowane komponenty. Całość spięta webpackiem i babelem (do kompilowania ES 6/ES 2015). Kolejna korzyść jest taka, że możesz renderować sobie taki komponent po stronie serwera i nawet wybrać, co chcesz, żeby było renderowane po stronie serwera, a co już w przeglądarce. Dzięki temu możesz różne wersje stron serwować w zależności od medium - mobile, desktop, google bot, etc. Przydatne, jeśli wspierasz starsze przeglądarki, ale też urządzenia z np. słabszym internetem.
Tak to wygląda w skrócie.
Na Twoim miejscu nie skupiałbym się na rozwiązaniu autorskim w JS, a skorzystał z jakiś lekkich bibliotek w zależności od potrzeb. W miarę nabierania doświadczenia być może wypracujesz sobie własne rozwiązania - wiele osób tak robi, ale jest to trudne i czasochłonne.
Pracowałem też w podejściu node.js + jade, a potem część rzeczy w angularze i kod dyrektyw (+html) budowany gruntem/gulpem. Ma to swoje plusy i minusy. Kiedyś było fajne, teraz bardziej z przyzwyczajenia i wygody wybieram html bezpośrednio w JS.
Jest też opcja użycia edytorów wysiwyg. W przeszłości potępione, ale obecnie w miarę sensowne strony można w tym zrobić, więc jeśli nie piszesz dużych aplikacji, to można się nad tym zastanowić. Popularne narzędzia to np. webflow czy macaw.