In Emacs 25 you can write native plugins loaded dynamically at runtime. With this you can do it in OCaml instead of C. Of course you can write it in anything else that will expose the right C interface.
I suppose that begets the question, why would I write a native plugin instead of using elisp? I'm guessing the answer is so I can do some sort of background work in another thread?
That, or for speed, or in order to take advantage of already extant library functions rather than reimplementing them in Emacs Lisp, or some combination of the above.
You can use the ocaml toolchain (for instance: ocamllex and ocamlyacc) and stop writing ad hoc parsers.