disclaimer: I do not speak for the Kotlin team and none of what I say here is specific to Kotlin.
C compatibility is easy because the C ABI is very simple: function call convention, structure layout, pointers, and you're done.
C++ is a lot more complex. namespaces, classes, templates, and overloading all affect name mangling, which is not even remotely standard across platforms and is only somewhat recently stable across compilers on the same platform. templates cause monomorphic specialization which can only be done at compile time. templates and inline definitions result in duplicates that need to be merged at link time. inlining forces you to match library versions very precisely, SFINAE requires you to be a C++ compiler, exceptions require call frames in a specific format to enable unwinding, and other features that simply don't map well to any other language.
there's a reason almost nobody implements a C++ interop. look at Rust, for example: bindgen only handles a small subset of C++, all C++ bindings need to be individually allowlisted, and what it actually does is generate C wrappers