Because the queue grows only in one direction and it is consumed in the other direction, reading a stale value from the other side is still safe, so two-word atomicity is not needed.
In fact the other side value is normally cached in a local memory location so to amortize the cost of roundtrips over multiple reads and writes.