I don’t see how your program crashing is “having handled all possibilities of present and not-present values”. If you allow the case of your program crashing as a sufficient condition for all cases being handled, then… in Java, all cases are handled as well. That makes your whole argument a pretty moot point.
Which means you didn’t seem to get my point: the type system doesn’t enforce that the programmer handles all cases in a useful way that doesn’t break your whole program and makes your airplane crash. That’s a problem of “totality”.
Java just offers a larger surface for messing up, as I’ve described. Your conclusion still remains wrong:
The option type is implemented in such a way that the programmer must handle the possibility of a present and non-present value.
Again: not true. The compiler converts it to an exception that will probably have devastating effects for the control-flow of your program. As such, the programmer is NOT forced to handle all possibilities.