OK, so I did not use a very good example. Though people do ocasionally have their permissions edited by another user while they are logged in, or do sometimes log in as a different user in a different browser tab, then come back to the first tab and click a link.
Another similar case is when you get a sesskey error after your session has expired, then you have logged in in another tab. That does happen, and we should make it comprehensible to the user.
The best example I can think of right now is in qtype_stack or qbehaviour_opaque. Both of these make a web-service call as part of processing a student's quiz/question submission. Obviously, it is possible that the other server is down, and which point the question type needs to generate some comprehensible description of what the problem is, which can then be displayed to the student in the quiz UI. The student probably already quite stressed because they are taking a test. They last thing they want is an incomprehensible error. In terms of getting that explanation from deep in the question plugin code to the quiz UI, and exception throw seems to work quite well.