One can have the kind of unsafe shared memory like C++ in OCaml by using a library like netmulticore. But the OCaml formalised memory model is offering the same kind of OCaml safety in multicore programs.
For your first point I'm not an advocate of using a single programming language for all kinds of things. But it's just my opinion.