The state isn't pruned during syncing, it is pruned after. During sync the node downloads accounts incrementally until the whole State is downloaded. After the node is in sync, pruning is activated. Since every account change is represented as a node in the Merkle Trie, to prune an account modification entry all that it takes is to delete the corresponding node from the trie. If your account had 10 modifications, it will have 10 nodes in the trie. Therefore, 9 nodes can be deleted, and the node corresponding to the last modification is kept. geth keeps the account entries in memory for the last 128 blocks, entries older than that are deleted