When I say it's not a language issue, that's because I can imagine a crate or design pattern filling this role, and I cannot as easily imagine a change to the language itself that would make it better. But I also haven't given this as much thought as it deserves.
I don't think that helps, there are a lot of intermediate steps that rightfully propagate or union errors and `?` makes that a lot easier.
The issue is figuring out when to not do that and wrap a low level error with a higher level error without losing the critical information and making things to generic.