I was thinking about same question some months ago and AFAIR I have succeeded with Html.handler. Maybe this example will help you
https://github.com/ocsigen/js_of_ocaml/blob/master/examples/hyperbolic/hypertree.ml#L276
let handle_drag element move stop click =
let fuzz = 4 in
element##onmousedown <- Html.handler
(fun ev ->
let x0 = ev##clientX and y0 = ev##clientY in
....