У вас есть std::string и 100 cpp-файлов, которые используют заголовочный файл string.
Для каждого cpp-файла класс std::string будет отдельно компилироваться, т.е. 100 раз. Затем линкер обнаружит, что все 100 классов это один и тот же, и выкинет 99 дублирующих классов. Итого - 99% лишней работы было выполнено.
Модули же позволяют вынести информацию о классах в строгий машиночитаемый формат, информацию из которого можно легко читать без необходимости каждый раз заново строить AST-дерево.