The core of the compiler is almost completely decoupled from Babel, and the core compiler API is (roughly) old AST in, new AST out (while retaining source location data). Under the hood we use a custom code representation and transformation pipeline in order to do low-level semantic analysis. However, the primary public interface to the compiler will be via Babel and other build system plugins.
I wonder if that core is binary or JS. I mean, whatever is done via a Babel plugin can be redone as a PPX, but reusing the logic vendored by React team is likely much better.