Yes, I think this is still a valid approach for a native look&feel of your app. Also take a look at djinni by dropbox, which will make communication between C++ and Swift / Jave much easier:
It includes bridges for std::string, std::vector and others and will enable you to have 2-way communication including JUCE style listeners.
Only downside is you have to define the interface in their own format which gets transferred into glue code for C++, pure Objective-C and Java