we reprogram them with the vendors control codes to work as USB ACM (serial)
Yes, you do that, and I do that, because you're absolutely right: wedge mode is a kludge. Problem is, lots of existing deployments do have them set in dumb keyboard mode. Why ? Because the development of that POS appliance or software was farmed out to the lowest bidder (meaning China/India), where the product was made to "work", and the project manager(s) have no idea how barcode readers even work nor why wedge mode is a bad idea.
The same is true of mag-stripe readers. I have seen countless setups in restaurants and movie theatres where the mag reader was in wedge mode. In at least one case the software hid this by enabling/disabling the device when it was expecting a swipe (using an NT filter driver) - but once enabled it would accept any input and pass it through the OS. Now the "good" thing about mag cards is the encoding does not typically support control characters, so you won't be rooting an ATM by that route. I mean... not unless the ATM has a pretty colossal backdoor triggered by a particular string of alphanumeric data.