Right, the problem is that LWJGL loads and uses MoltenVK directly, bypassing the Vulkan loader. To fix this, pass -Dorg.lwjgl.vulkan.libname=<path_to_vulkan_sdk>/macOS/lib/libvulkan.dylib to your program (or set it programmatically using Configuration.VULKAN_LIBRARY_NAME). This will make LWJGL load the Vulkan loader instead, which knows how to discover the validation loaders and forward Vulkan function calls to the ICD (i.e. MoltenVK).
Note that you'll also need to export VK_LAYER_PATH & VK_ICD_FILENAMES (like you've done already). Modifying PATH or DYLD_LIBRARY_PATH is not necessary.
Finally, <vulkan_sdk>/macOS/etc/vulkan/icd.d/MoltenVK_icd.json points to the MoltenVK build that comes with the Vulkan SDK. This is usually behind the build that comes with the latest LWJGL snapshot (MoltenVK is updated frequently). However, you can modify the json to make it point to the LWJGL build instead.