Camlp4r : using a correct end of phrase (single semicolon) in OCaml REPL

I understood your aim as evaluating phrases in the toplevel (aka REPL). Evaluating phrases in a .ml buffer (C-x C-e) will likely not work as the phrase will be incorrectly detected.

That’s why I changed all the ;; with ; in tuareg.el. But I may have done errors.
; also represents a sequence:
ordinary OCaml syntax e1; e2; e3; e4
revised OCaml unambiguous syntax do { e1; e2; e3; e4 }

At least, when in the OCaml buffer, shift return should just add a single semicolon before calling comint-send-input (doing M-x comint-send-input when in the OCaml buffer sends the phrase in revised OCaml syntax which is correctly evaluated).
I don’t understand why tuareg-interactive-send-input-end-of-phrase is still adding ;; after this change (;; replaced with ;)

I think that this topic may interest all people who aim at understanding and customizing their OCaml text editor/IDE. And of course the OCaml programming language itself.

Regarding using camlp4o/camlp4r or not:
you should be talking about the “new and now dead/deprecated camlp4” (from 2007- OCaml 3.10). I’m talking about the “legacy and genuine camlp4” which name is campl5. camlp5 works pretty well, is used by coq and is perfectly maintained (7.10 released 2019-08-25 for OCaml 4.10.0).
@mjambon explains clearly “the difference between camlp4 and camlp4” in his very nice camlp5 tutorial Tutorial: How to customize the syntax of OCaml, using Camlp5
afaik (this is now my personal opinion), camlp5 is reliable and is much more powerful than the recent and intentionally limited ppx system which must now surprisingly be redesigned because “every OCaml release can potentially break your code” (see The future of ppx).