After a /list command, start a 60s timer. If a 321 or 322 or 323 numeric is received, stop the timer and then wait for a 323 numeric to be received. If after 60s a 321, 322 or 323 has not been received, assume that the server is not going to respond and allow the user to issue another /list command.
mIRC was doing this at one point. However, users kept complaining that the timeout was too short due to lag, so I kept extending it, until I eventually decided to comment it out of the code as it no longer made sense to wait several minutes for a /list timeout.