"fi" and "esac" come from shell programming. He's copying various style/syntax elements (including ugly bits!) from sh and C in hopes that it will be less off-putting to mainstream programmers than ML syntax.
The problem with having a built-in object system is that you're stuck with it. People mean very, very different things by OOP, and being able to add an OO system when it's useful is probably a better approach. Using OO without "bolting it on" works well for the Lisp family and for Lua. (Adding a prototype-based, class-based, or message-passing object system with via metatables is quite easy.) You just need to have a sufficiently flexible core language.
Of course, doing it in a fully static-typing-safe manner is tricky, but since OO is arguably defined by late binding, that's naturally works against pinning as much as possible down at compile time. (Lisp and Lua are just dynamic and don't worry about it.)
The problem with having a built-in object system is that you're stuck with it. People mean very, very different things by OOP, and being able to add an OO system when it's useful is probably a better approach. Using OO without "bolting it on" works well for the Lisp family and for Lua. (Adding a prototype-based, class-based, or message-passing object system with via metatables is quite easy.) You just need to have a sufficiently flexible core language.
Of course, doing it in a fully static-typing-safe manner is tricky, but since OO is arguably defined by late binding, that's naturally works against pinning as much as possible down at compile time. (Lisp and Lua are just dynamic and don't worry about it.)