OCaml’s OO classes are great for implementing behaviors where there’s a default that can be gradually refined in different directions. I’d point to this example: Visitors by François Pottier. The reason that e.g. Jane Street fights against this style of programming is: when part of the system changes, the compiler no longer “interrogates” the programmer to adapt other parts that the changed part interacts with, because it will just assume some-or-other default behavior was intended.
Edit: One could coin a slogan “security via non-extensibility”. Sometimes it is desirable that when you add an extension, for the compiler forces you to go through all places that interact with the extended type – less likely to overlook a spot where the extension is mishandled.