Glad to see something like this, really cool!
Thanks !
Why OCaml and not PureScript for the ports?
I chose OCaml because I love OCaml
and to be honest, I am more comfortable with OCaml than with PureScript. (But PureScript is on my short-time-todo-list).
In OCaml, you have object
Yes, and Object fit very well with the JavaScript environement. But be reassured, you can write pure-object without state-mutation 
you don’t have the Eff monad
I could handle dynamic effects using free monad (or be patient and wait for multicore and his effect handler).
In addition, syntax extensions of OCaml (via ppx) could generate me the module “port” Elm to guarantee a good typing between ports.
But the main reason is that I really love OCaml ^^