I'm wondering how the java compiler actually works special fields like this into its compilation step.
The compiler is not involved. Those fields are discovered at runtime by reflection.
Other than serialVersionUID and serialPersistentFields, are there others?
Well ... there are many other parts of the Java SE libraries that use reflection to find things. For example, object serialization uses reflection to determine if a class has a readObject or writeObject method. And then there is the SPI pattern where service provider classes (e.g. JDBC Driver classes) are located by searching the classpath. (It depends on what you mean by "non-Java like" ...)
I don't know if there are other special fields in the SE libraries, but the question is probably moot since application and 3rd-party code can do the same kind of thing anyway.