Interesting idea, but I would have liked a deeper dive on what the tension is about. Using public function B within A doesn't force the developer to make bad decisions about B's signature. It merely widens the risk a bit, but the main idea is still to only change public contract (e.g. B's signature) in a way that prioritizes de user.
One could argue that being a consumer of one's public contract helps keep its quality high?
Am I missing another aspect of this tension?