I know that in LWJGL that the flush takes a long time. So basically you can send all the commands to the card but when you call flush there is this long pause while it actually finishes rendering. It seems like the request to draw the Drawable and the resulting callback to the event listener does not return until the flush is complete.
As another person mentioned, there is a difference between and explicit glFlush(), an explicit glFinish(), and an implicit finish caused by a buffer swap.
In general, glFlush() is a bad thing because it forces the driver to finish executing all glCommands before returning control to the caller. When using glFinish() or doing a buffer swap (which JOGL does internally at the end of each frame), it merely tells the graphics driver to begin processing commands and then returns control back to the user. This facilitates parallelism by allowing your app to continue processing while the card is busy flushing queued events.
So, in general, if you're using JOGL you neither have to nor need to do make calls to glFlush(), glFinish(), or SwapBuffers(HDC). Calling glFlush() explicity shouldn't cause any harm, but it will certainly kill your performance.
-chris