We don’t have a single protocol for acquiring (online) card payments either, and this hasn’t been an issue. Everything just uses plugins or custom integrations.
Not sure about in-person payments. From my experience, banks program their own firmware into the terminal, but it may support some standardized API over USB / Serial. Even then, any given bank can implement some subset of features, and supports only a bunch of models (so if you decide to switch banks and your terminal isn’t “blessed”, you’ll have to buy a new one; thankfully, they’re fairly cheap used).
It’d be nice to have a unified protocol for all payment types IMO, but I’m not sure that’s realistic. Some Chinese payment processors have something like that, with a couple Alipay gateways emulating one protocol established by another gateway, so you can just swap out the API endpoint in case you want to switch. But even that’s just for the simplest case (you have to redirect the user to the processor’s page).