Well, before we start talking in code terms - exceptions - let us talk in people terms.
There are two things that are jumbled up in Moodle's exception handline.
1. Reporting meaningful error messages to users when something has gone wrong that the user might be expected to understand and expect. This is the kind of situation where we have a require_capability in the code, but in users terms, we need to tell them that they are not allowed to do that.
2. Internal, technical errors that we never expect users to see. A good example of this would be anything that is currently a coding_exception.
Between these two, there is a grey area.
1. is an important part of usability, and must be localised. I think the require_capability makes the case that a good way to implement a localised error like that is what we have now: an exception throw that displays a nice localised error message if it is not caught.
However, it is also clear that type 2. error messages should not be localised.
So, overall, Dan has identified a problem, but his proposed solution is too simplistic.