Шаблонизатор позволяет выводить переменные и иногда организовывать простую логику (циклы, условия).
Препроцессор расширяет или меняет синтаксис.
Pug делает и первое и второе:)
Любой препроцессор умеет использовать переменные. хрень какая-то написана
а вот задача шаблонизатора подставить переменные. case там может не быть в принципе.
Шаблонизатор получает данные (с бэкенда, например) и вставляет их в шаблон, организовывая минимальную логику (циклы, ветвления, ...). Гляньте на EJS , например. Он вообще никак не затрагивает html-синтаксис.
Препроцессор как раз не имеет отношения ко входным данным, он просто упрощает работу с HTML . Попутно видоизменяя синтаксис в целях удобства.