Как раз меньше всего смысла парсить строку формата в контексте конкретного типа, потому что это можно применить операцией к конкретному типу
Вопрос удобства, для чисел например куча опций формата - база, выравнивание, ширина и т.п. Или то же время, много составляющих, нереально без спецификации описать все возможные форматы операциями. Но иногда нужен custom и это удобней делать через новые типы (которые тоже могут какие то спецификации поддерживать). Я ж не могу например для size_t переопределить способы форматирования, но могу завернуть его в новый тип, format("file size: {}", fmt::bytes(size)).