But yes, jni is in violation of these rules by defining global names starting with an underscore.
So is the xorg code. So is the Linux kernel code, I believe. And I have no doubt that you'll quickly find dozens of other projects that have the same problem.
That poor rule must be the most-ignored one in the C standard.