Apart from the fact that display lists are deprecated, although I am sure Mark Killgard will drop from the sky in a minute clutching a flaming pitchfork and try to tell you otherwise, there are far better ways to do what you are doing.
The thing is you are getting to the point where you need to use other methods so why stick yourself with the extra problem of having to conditionally reconstruct Display Lists, and keep using a subset of OpenGL which is potentially not portable in the future?
Having said that, you can do this… GL_COMPILE_AND_EXECUTE, or GL_COMPILE or just GL_EXECUTE on a display list…
So why not in your main loop check to see if the display list needs to be refactord and if so call the code to init it but init the display list with COMPILE_AND_EXECUTE.
Otherwise just use the existing display list with GL_EXECUTE.
if(display list is no longer valid) initWithCompileAndExecute()