If we really want people to be CONVINCED of the coins being burned IMMEDIATELY (not after the coins weren't moved for 20 years) then we need to burn them with a OP_CODE that makes the coins verifiably non-spendable.
Correct. There are also other ways to provably burn coins, by sending them to invalid scripts which cannot be unlocked. The biggest such example of this is this transaction:
https://blockchair.com/bitcoin/address/s-272edf45031dd498e7b3ae89e11ff21b. In this transaction, someone failed to use their pubkeyhash and instead locked the coins behind "0". Since there is no RIPEMD160 output which outputs a single "0", since the output is always 20 bytes, these coins are provably unspendable.
Users wont verify them and will end up sending money to a scam.
Not just that - users
can't verify them. If I give you an address which "looks" like a burn address, such as 1BurnTheseCoinsNowgk38fLR5y3meHnE, there is absolutely no way for you to verify whether I know the private key to that address or whether I don't. Sure, it
looks unlikely, but I have the exact same chance of randomly generating that address (or any other address which "looks" like a burn address) as I do any other possible address.