Hmm, after adding that stuff and porting over all the fixes from the 2.x version suddenly my test works in 3.x. The errors I got were different than I expected though.
[LWJGL] OpenGL debug message
ID: 0x500
Source: API
Type: ERROR
Severity: HIGH
Message: GL_INVALID_ENUM error generated. <cap> enum is invalid; expected GL_ALPHA_TEST, GL_BLEND, GL_COLOR_MATERIAL, GL_CULL_FACE, GL_DEPTH_TEST, GL_DITHER, GL_FOG, etc. (136 others).
I learned that GL_FRAMEBUFFER_EXT is not a valid argument to glEnable.

FBO drawing still doesn't work, nor does it throw any errors. In LWJGL3 now even glClear doesn't work on an FBO (although I don't know that it ever was working).
EDIT: Hmm.. weird.
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
Throws a GL_INVALID_OPERATION error, saying the required buffer is missing, even though buffer completeness checks out. I ensured that those weren't being called until after the texture was attached to the FBO as well, but it didn't change anything.
EDIT EDIT: nvm the windowbuffer throws the exact same error even though drawing works just fine, and removing that code stops the errors. I have no idea why FBO drawing isn't working now.