Difficulty adjusts by very granular percentages to target for 10 minutes blocks. But adding another zero at the end of the chain of zeroes from the header hash requirement for a valid block would increase the difficulty exponential. So how does the Alogrithm target so precisely the right difficuly only through the use of "zeroes"?
The difficulty is actually represented by the target threshold encoded in the
nBits value in the block header. Where difficulty represents the human readable representation ("how often do we need to try to find a solution"), the target threshold defines the prefix a block must undershoot in order to be valid. This means that the 256-bit block hash interpreted as a number must be lower than the target threshold.
nBits is only a 4-byte value, it is a compressed representation of a 256-bit (32-byte) number. The first byte defines the exponent, the remaining three bytes give a 24-bit mantissa for the target.
While this leaves most of the 32 byte in the target threshold to be just composed of zeroes, the difficulty can adjust in a much more granular fashion than just adding leading zeros.
David Harding has elaborated the full details in How is the target section of a block header calculated?.
As a complement to @Murch's answer, I'd like to cite an example from Grokking Bitcoin:
The target is written in the block header as 4 bytes,
ABCD; the 32-byte target is calculated as
BCD× 2^(8*(A-3)). That’s
A-3zero bytes after it. It’s this awkward because we must be able to express a wide range of targets, 1–2^256, with only 32 bits. The target in Qi’s [a character in the book] block is written as
926eb9with 25 zero bytes after (
1c–3 = 19, hex code for 25).