I figured it out in no small part thanks to the invaluable help (and commendable patience in his comments) of José Pereda. So credit should go to him.
So, here we go :
What are your objectives
Your jar must conform to the following specs :
- it must contain the javafx jar libs (meaning their packages folders, extracted from their jars and placed at the root of yours).
- it must contain the binaries javafx libraries at the root (*.so for Linux).
- it must (very important) have a launcher : a main class that does not extend "Application". If it doesn't, the error won't be clear : it will tell it can't find the javafx runtime ; that is not really the problem.
Now if you can do that by any mean (Ant, Makefile, custom script, specific IDE feature...) then everything will work nicely.
How to do it in NetBeans (and other places using Ant, with minor modifications)
First, I created a lib folder in my project and put the libs directly there (this is not necessary, just easier in my case), then I overrided the "post-jar" target in my build.xml, adding the following to create a second "dist" repository that I called "dist-portable" and built the fat jar inside :
<target name="-post-jar">
<property name="store.jar.name" value="${application.title}${application.desc}-portable"/>
<property name="store.dir" value="dist-portable"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title}${application.desc} into a single JAR at ${store.jar}"/>
<delete dir="${store.dir}"/>
<mkdir dir="${store.dir}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="lib" includes="*.jar"/>
<fileset dir="lib" includes="*.so"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
</target>
Alternative solution
Use more advanced build tools such as Maven or Gradle. I don't want to (hence the very point of my question) for they seem far too complex to be worth the bother considering I'm only doing small projects.
More controversial alternative solution
The "8" generation (NetBeans 8, Javafx8 and JDK8) were great pieces of software and were released not that far back in time (first half of 2014) and officially supported up til a couple of months ago : they are not ancient and... they just work out of the box without having to do anything. The "11" generation might have to mature a bit and I don't think every environment has jumped to the cutting edge JDK11 yet.
The older versions can still be found and work well just about everywhere, you might consider simply using them. Just be conscious they are not being updated anymore (and this can be a security concern).