Any synced full node can verify a new snapshot, since any new snapshot is previous snapshot + transactions since then. You don't need to keep any history before the last snapshot.
Most nodes aren't permanodes, and they actively do discard all data every time a new snapshot is made.
So every snapshot is a complete state of the tangle at a point in time, full nodes keep the data after that snapshot. You can then use the previous snapshot + the new data to create/verify a newer snapshot, discarding the previous one and all data since then.
You can view directly how it is done here.