Panics are a terrible way to show error messages, as you note. The solution is to avoid panics as far as possible, not to make them slightly less terrible. I’m not sure if I’m misreading here, but panics should never be deliberately used to show the end user a message.
Yes, debugging the issues non-technical users report is hard. But this proposal does not help much, as I will argue in more detail below. A better approach might be making it easier for users to give you the stack trace, e.g. by dumping it to an easily located file when a panic happens. People are already working on enabling this, in particular to allow reacting to a panic in a user-defined way (e.g. displaying a custom message to the end user).
Where’s the guarantee that the libraries you depend on will put a meaningful error message on the Option? Especially since constructing a bare None (i.e. without error message) must remain valid for backwards compatibility.
Speaking of this, if there are several places calling (using your pseudo-code example from the first post) return_option, how do you tell which of those calls produces the None("couldn't do the math?")? And how do you get the value of x which provoked that? And the list goes on. This proposal feels more of a band aid to me, it doesn’t seem to address the actually hard parts of tracking down the source of an unexpected None.
So use (or lobby for std and other libraries to use) Result<T, &'static str> or Result<T, String> or an error type that implements Debug in a prettier way. In fact, your proposed extension of Option is isomorphic to Result<T, &'static str> or Result<T, String>. What you want already exists, people just don’t use it frequently. Partly because error handling is something people are not naturally good at, but also because it is not as useful as you think. Panics are bugs, panic messages are therefore aimed at the developers. Furthermore, developers have stack traces available and those already tell you which call panicked.
To be clear, I’m not claiming the situation is perfect. There is much that could be improved, for example it can indeed be tricky to make the connection between “this unwrap call failed” and "this line caused the the Option to be None". However, I don’t see how this proposal really helps. And I haven’t even started seriously considering its downsides and costs.