Why are UTXO locks stored in memory only? Locks are stored in memory only. Nodes start with zero locked outputs, and the locked output list
is always cleared (by virtue of process exit) when a node stops or fails.

https://bitcoincore.org/en/doc/0.21.0/rpc/wallet/lockunspent/
Because it was added as memory-only filter by Jeff Garzik in PR: https://github.com/bitcoin/bitcoin/pull/1861/

It might be nice to store this in the wallet, but to judge interest and review the interface, this is a useful first step.

Couple of users who care about privacy wanted persistency for locking unspents and created issue: https://github.com/bitcoin/bitcoin/issues/14907 but it was closed in May 2020 because of lack of interest and nobody tried changing it with a PR.