Nice article which puts a name to the way your junior programmers try to justify their 11 callbacks, all methods virtual and factory singletons when all you need is a single C function with the right parameters.
It’s certainly a grey area, but it’s the mark of a seasoned programmer that they can make the correct call.
Personally, I see a dividing line between public api (the api which covers 85% of customer needs) and the “implementation” api which is notionally public but actually very few people use.
I can tolerate a little baggage in the public api if it becomes more robust to future refactorings (especially a class of refactorings, not just a single one). There’s no place for cruft in your implementation api however because that usually contains the difficult stuff and the interfaces reflect to a much greater extent the underlying implementation which may be changed any time.