There is no practical reason why this conversion was done.
However, it is a quite useful one. Intuitively, it should be quite clear: q1 ↔¬q2 means that q1 and ¬q2 must have the same value. As one of them is negated, this is the same as the values need to be different. That's exactly what xor checks.
By the way: Your first line of equations is already a good start. Let's not negate the xor though:
(a ⊕ b) = a∧¬b ∨ ¬a∧b = a∧(¬b) ∨ ¬a∧¬(¬b)
This looks pretty much like the DNF-Version of biimplication, doesn't it? Just that the right operand is ¬b: