Bitcoin (and blockchain generally) will never scale to mainstream transaction loads
Why not? As long as you can commit to some hashed data every 10 minutes, and get it timestamped properly, then it doesn't matter, how much data you want to timestamp. You don't have to push everything on-chain, to make a transaction, all you need, is to commit to that data. And a single signature can handle easily a single commitment, without increasing on-chain size, without making additional OP_RETURN; all you need, is just tweaking your signature in a deterministic way. Which means, that you can commit to a single 256-bit number, in every signature, in every block, without any additional on-chain data, if you only want to build an SPV-like proof for your data.
PoW means it is actually intentionally slow and expensive to transact
Why? If you have a single block every 10 minutes, then it doesn't mean, that miners are sitting idle, and suddenly submit something, after those 10 minutes. They are actively trying to build new block templates, over and over again. And if you explore weak blocks, then you can see, if your transaction is included or not. More than that: by exploring miner shares, you can actually measure, how many Proof of Work was already contributed, and provide an SPV-like proof for that, for any hashed transaction.
So, if the difficulty is set to X, then on average, statistically, every second, the whole network produces Proof of Work, equal to 600 times lower difficulty. And you can find a time, where the global difficulty was 600 times lower than today. Which means, that the same power, that was needed to produce a single block then, is spent to mine your transaction now, for every second. If a single confirmation for some amount was safe then, why it suddenly became unsafe now?
For many payments, you don't have to wait for a single confirmation. A rule of a thumb is to measure the "coinbase coverage". If the coinbase reward is 4 BTC (3.125 BTC plus 0.875 BTC fees), then if your transaction sends 1 BTC, you probably need 0.25 confirmation. If you can get a weak block with 0.25 of the current difficulty, then you are probably good to go.
Also, if you want to limit potential replacements, then you can explicitly apply OP_SIZE on a signature, and then it will be guaranteed by the Script, that any replacement will require a given amount of Proof of Work. Which means, that if you can measure other party's hashpower, then you can require putting a given amount of Proof of Work, to actually make a valid second version of the transaction in the first place. Then, you can safely accept for example 0.25 confirmation, because it will reach a single confirmation, before a second party will produce a second transaction version, and broadcast it successfully (also, you can use locktime to control ownership over time).
Why would you price something in Bitcoin?
Because you want to measure, how many goods and services you can buy with coins, that you are currently holding. If you have more BTC than USD, then it makes sense to measure things in BTC. People in other countries, where USD is not the national currency, are measuring everything in EUR, GBP, CHF, and other units. The reason is simple: they have more locally used coins, than USD. And the same is true here: if you have more BTC than USD, then why measure things in USD?
Also, sending round amounts can make it easier to hide in the crowd. Because it is more natural, that more people would send 0.01 BTC than 0.01001234 BTCs. Using round amounts in USD, converted into satoshis, is tricky. It is easier to find two users, one having GBP, and one having USD, and both picking 0.01 BTC, than trying to guess the right amount, which will be round enough for all users, using non-BTC as a measurement unit.
see: the imperial system
Of course, nobody measure things in meters and kilograms, and everyone is using Fahrenheits. Obviously.
In practice, you have at least two systems, if not more. And if you have some legacy software, then it is hard to change some protocols, when you agree upfront on interfaces. For example: I was working with code, where interfaces sent things in Celsius. To introduce Fahrenheits, we need to convert units back and forth, because old devices accepted messages in old units, and you simply couldn't send them a message with "100F", because they would interpret it as "100*C". And nobody wanted to refactor 90% of existing and working code.
So, in BTC, under the hood, we have just satoshis. We can write software, which will display USD. We can use some tricks, to get millisatoshis. But the protocol is already established, and if you want to send 250 msats, then you need to do some tricks, like "4-of-4 multisig on a single satoshi", to express the fact, that there are four users, owning 250 msats each.