Because you just don't have the tools to provide the interface in C.
More specifically, one needs a mechanism to capture type information such as (variadic) templates to implement type-safe formatting in a library.
Most helpful comment
Because you just don't have the tools to provide the interface in C.