For sockets and network, file sockets work but will respect Android's application-specific permissions model, and networking works but you do need Network permission in the APK. Knowing how Android handles permissions etc gets you at least 50% of the way towards just using Python without thinking.
Access to the Java API's via PyJNIus virtually gives you access to the entire platform quite naturally. You could probably write an entire "native" Android application using JNIus, so you would be using a P4A, Python, JNIus solution in that case.
There are corner cases where you need to hold refs to Java objects to prevent race conditions and some other obscure bugs you can only have when talking across language runtimes, but basically nothing has been so difficult that I wouldn't use Kivy on account of needing to do something really Android specific.
My most recent commercial application makes use of talking over USB using a little bit of Java called through a very narrow Python interface. This is the recipe for success at using JNIus. Write an API in JNIus and write the actual Android API using parts in more Java.