Js_of_ocaml takes lowlevel bytecode from OCaml compiler, BuckleScript takes the highlevel rawlambda representation from OCaml compiler
Js_of_ocaml focuses more on existing OCaml eco-system(opam) while BuckleScript's major goal is to target npm
Js_of_ocaml and BuckleScript have slightly different runtime encoding in several places, for example, BuckleScript encodes OCaml Array as JS Array while js_of_ocaml requires its index 0 to be of value 0.
Both projects are improving quickly, so this can change in the future!