1. display.update() always generates a org.lwjgl.opengl.OpenGLException: Invalid enum (1280).
You need to check for GL errors explicitly to find out what went wrong, and that directly after you do stuff.
Otherwise, you always get the errors at update().
So we can't tell you what went wrong here. You need to check for GL errors after your individual GL statements.
That slows the whole stuff down - once everything works, delete the error checks again.
You can get errors with GL11.glGetError().
and 2. if i dont do all opengl calls in the same thread i get Nullpointer exceptions, i would like to for instance load VBO's and textures in a thread thats separate from the thread the renders the scene
If you're in a different thread, you have to switch to the context of your rendering Display to load stuff for it.
http://lwjgl.org/wiki/doku.php/lwjgl/tutorials/changingcontextsOr you could theoretically share lists, I don't know whether that's implemented though - I never looked into it.