It compiles the python interpreter for android/arm, then bundles this all together in an APK - along with much of the standard library and any extra modules the user wants. It also includes a java bootstrap app that interacts with the system, but does essentially nothing except initialise and display an opengl surface that kivy renders to - along with running the python interpreter on the user's kivy code.
This bootstrap is invisible to the user, you don't need to touch the java to use kivy. That said, kivy has some cool sister projects for using the normal java api - pyjnius for accessing java classes directly from python, and more recently plyer to provide a more pythonic wrapper to common things like vibration, sensors etc.
(The above is also mostly the same for the ios build process).
> Is it better than PhoneGap etc and closer to native apps?
I would say more that it is just different, with advantages and disadvantages of its own. It doesn't use native widgets (though it's possible to create and use them in some ways with pyjnius), so it isn't different in this sense.