The only things I can find that throw catchable exceptions seem to be "throw" (obviously), various Toybox methods (whose implementations presumably "throw" themselves), and (again obviously) anything that (recursively) calls a function that throws, or calls a throwing Toybox method.
There is a long list of errors that aren't catchable in the documentation (at least, I think its saying that all of those aren't catchable - the wording isn't 100% clear); but that list isn't exhaustive. For example division by zero isn't catchable, and isn't on that list.
So what I'm asking is, whether there is anything else that can cause an error condition which can be caught. eg in many languages, out of bounds array access would be catchable; but it's on the list of errors that aren't catchable, and I've verified that I can't catch it.