I don’t understand why these contracts don’t let addresses that make this particular error recover their funds, it would be easy to implement at contract creation or am I missing something?
That would be a good fix, and it is a glaring omission. But the contract can't be upgraded, so all existing contracts depending on wETH would have to be migrated or replaced too.
Basically the smart contract could have been written so that this transaction was rejected or so that the money could have been sent back, but that would make inteacting with the contract a little bit more expensive for everybody. Or maybe the developers wanted it to be possible to burn tokens by sending them to the contract address.