The thing is that the client data will be copied to the display list so you cannot edit it later.
Exactly how display lists are implemented is up to the implementor. Generally for nice big data sets it is well worth display listing if you don’t need to modify the data. For small display lists it’s not worth display listing because the overheads can outweigh the benefit. If display lists are not stored on the card they’ll be DMA’d from memory (mapped space permitting). If you do not display list then arrays are a better option than glBegin glEnd data which is unpredictable by the driver and tends to get repackaged by the driver before dispatch anyway.
If you can edit your data in an efficient vertex program then that will very probably be more efficient to use a display list than touching vertex data with a program and holding the client arrays in system memory.
The results are highly implementation dependent.
You should look at VBOs as a means to classify your data and where it is stored by your type of useage allowing the driver to make smart choices about where to allocate and move the data and whether to lock or unlock and/or copy it for various operations.
VBOs with arrays is probably the best and most flexible option available and gets away from the two simple choices of setting display lists in stone vs storing data on the client side.