the type system does not tell the whole story due to "exception"
There have been numerous type systems dealing with exceptions and other kinds of computational effect, so the reason it doesn't appear in O'Caml is not that it cannot be done. I think there are two reasons why exceptions do not appear in types:


The types that programmers have to write become larger.
Exception typing interacts poorly with subtyping and higher-order features, such function types. Ultimately, this is because exception declarations will be an over-approximation of the exceptions that will be thrown, so reusable code needs to have very general exception declarations. For example, the exception declarations for a higher-order function need to be general enough to describe all possible functions passed to the higher-order function. Similarly, the exception declarations on a superclass need to anticipate all possible exceptions that can occur in the subclasses.  (Subtyping among exception types alleviates this problem somewhat.)


Java is a good example programming language that has exception typing and these two problems.

Here is some of the research done in the area:


Type-based analysis of Uncaught Exceptions by Xavier Leroy and Francois Pessaux
Monadic effects by Andrzej Filinski
A type system for call-by-name exceptions by Sylvain Lebresne
A theory of substructural types and control by Jesse A. Tov and Riccardo Pucella


Looking at these papers and chasing the references within will give you more details of what has been done in the field.