further to what mh stated, you can select different memory displays in task manager. one is 'paged memory' or some such, which is the amount of physical memory which is actually used for that process and will not include unused memory like zero-filled bss sections.
quake's memory usage comes from multiple places. textures, malloc, bss, and some engines use virtualalloc. glquake never destroyed any textures (quake2 does, but not quake), but glDeleteTextures can free up that memory if you wish to use it. free() will tend not to release memory back to the system as its often not page aligned and system calls are expensive in malloc/free intensive code. bss cannot be freed other than by closing the library/program, but it also won't be paged in unless you actually poke it, so you can have a large bss (quake does this a lot) without paying any real penalties other than in coding style. virtualfree is the only way to guarantee that memory is released back to the system, the virtual memory subsystem also a nice way to zero-fill large blocks of memory quickly.
malloc may or may not page the memory in. On linux, malloc does _not_ allocate memory - it allocates address space which is only paged in when its needed. Typically this memory is identical to bss in functionality, except that more address space can be made available for it as needed. The heap provided by virtualalloc for malloc in windows is likely to be the same.
If your system runs low on memory, its quite likely that sections of your exe will be flushed to disk, as they can easily be reloaded without touching the page file. Also its quite likely that the exe wasn't actually fully loaded from disk in the first place, which is how .exe installers with large data payloads can function on a machine with only 8mb ram.
So yeah, the memory usage is a lie.

.