There is no solution yet.
From a bird's-eye perspective, 3 things are needed: Create a key, derive an address from the key, store the key.
Creating a key safely is possible with dice. You would probably create a seed phrase instead of a key directly, but for this discussion it is the same.
Deriving an address from the key is hard and I have not yet seen a good protocol on how to do it. I have read through a bunch of descriptions of how people do it and they are all weak and brittle. The most popular seems to be "I order a hardware wallet and follow the instructions that come with it". But even people who put a lot of thought into it come up with weak and brittle approaches. I would think there is a way to do it safely. But I have never seen a description of one yet. It might involve multiple computers, multiple software implementations and a hell of a lot of work to create a multisig that is not prone to a single attack vector.
Storing the key is probably the hardest. The most popular way seems to be to store it in a drawer or a safe. So now those coins are just as safe as a piece of gold would be. Or they use a multisig and store the keys in multiple locations. Quite painful. As you have the ongoing problem of keeping those locations accessible and safe at the same time.
> There is no solution yet.
Again, "best solution we have available" for self-custody is hardware wallets, so we're back to square one.
Imagine if I tried to discuss and argue about things like this on a TypeScript submission? "No, this won't actually solve the problems of TS" I say, "What is the solution then?" someone asks me and I reply "There is no real solutions to those problems, just use Clojure, problems avoided!", completely missing the point.
How is multisig "quite painful" in your opinion?