Handling end-the-program situations in LWJGL

I have seen many ways of handling program critical errors in LWJGL. Such a situation would be the GLFW window handle of glfwCreateWindow being zero, for example, because width or height are <=0.
Personally, I’ve always thrown exceptions at this point. I’ve also seen System.exit coupled with an error message. Recently someone suggested assertions to me.

What is the most conventional and useful way, in your opinion?

I’d say it depends. In a development environment you certainly want to fail fast and with the most possible information you can get. So definitely throw an exception with a meaningful stack trace and with debug line numbers enabled during compilation.
When deploying to a customer/client, you probably don’t want them to see a Java stack trace, even though that might be helpful for you to diagnose the problem. You’d then have the exception and all other related information stored in a file and maybe provide the user with the ability to upload the diagnostics file to you (your server) also with the option to view every submitted information before sending them.
I certainly would not call System.exit() anywhere in your code.

Assertions are only useful for you during development though. I assume you / they are not shipping things to end users with assertions enabled! :o