I've worked like this for decades. Layers, with each layer assigned a particular domain and API restriction (for example, I have a multi-layer backend, and, if I want to access the database directly, I need to implement that at the very lowest layer, and then set up a "tunnel" of access to the top-layer exposed API, through the intervening layers, applying whatever access control and filters are appropriate for each…
AFAIK, the only C++ access specifiers are private, protected, and public. Hardly an "insane number".
But you have a point. It's a bit overblown, and I'll tamp down the rhetoric.