Looking at the source of native-lib-loader, it appears to always use System.load:
$ git grep '^[^\*]*System.load'
src/main/java/org/scijava/nativelib/NativeLibraryUtil.java: System.load(extractedFile.getPath());
src/main/java/org/scijava/nativelib/NativeLoader.java: System.load(jniExtractor.extractJni("", libname).getAbsolutePath());
System.load is the low-level, you-need-to-manually-load-your-dependencies-in-bottom-up-order solution. The high-level solution, System.loadLibrary, loads dependencies recursively, but requires the java.library.path variable to be set properly before the JVM starts up. So AFAIK, there is no perfect solution here.
It would be awesome to have a more universal, turn-key solution for interfacing Java code with native code in a way that manages dependencies really properly. Unfortunately, NAR and native-lib-loader do not take things all the way, and doing so would require a substantial time investment, IMHO, along with expert understanding of both technologies (Java and native libraries).
Regards,
Curtis