A typical, although not quite universal, feature of
sub-algorithms in symmetric encryption algorithms is the use
of "S-boxes" (the "S" stands for "substitution"). S-boxes
are in fact just functions. Rather than simply operating on
individual bits (as XOR does), an S-box takes N bits of
input and produces N bits of output. At their heart,
S-boxes must be one-to-one functions because reversibility
is required for decryption (but see the "Avalanche effects" panels
for some complicating details). Each bit is still transformed to a
new value, but its transformation depends on the bits around
it.
Actually, once we start to look at S-boxes, the notion of
tracing a specific bit as it travels through an algorithm
breaks down somewhat. It is not so much that bit-one of an
S-box input corresponds to bit-one of its output; rather,
the whole output block corresponds (a one-to-one relation)
with the whole input block. But whether each individual bit
is substituted, moved, both, or neither is irrelevant. As long
as the correspondence is one-to-one, we can reverse the
operation during decryption.