The original problem was that sendmail.cf was considered to be too low-level and overly-flexible. It's like an assembly language for address rewriting.
The "solution" was to put a simple macro language on top of it, combined with a set of boilerplate configurations.
The real problem with that solution, other than m4's syntax rivaling sendmail.cf's syntax in ugliness, is that the person trying to avoid the assembly language of sendmail.cf is limited to the few boilerplate configurations that someone else has provided (and if we're lucky, documented). It's like we got something like a macro assembler for address rewriting, when what was needed was something much higher-level.
And that higher level is what we have with pretty much every other major MTA around today. They don't have the total flexibility of sendmail.cf, but they're both more flexible and easier to deal with than sendmail.mc (which is intended to be easier to deal with but less flexible than sendmail.cf).