JNI, as the name suggests, serves the purpose of integrating native code into your Java applications. Which means you can call a function written in C from your java code.
Now JVMTI doesn't necessarily add anything to JNI as it serves a completely different purpose. It provides means of communication between a JVMTI agent and the Java Virtual Machine for tools like profilers, debuggers etc... It merely uses the JNI, but doesn't really add anything to it.