No, change addresses are optional. The protocol allows transactions with one input and one output:
https://en.bitcoin.it/wiki/Transaction#Principle_example_of_...
https://en.bitcoin.it/wiki/Transaction#Principle_example_of_...
And yes, their purpose is very explicitly extra anonymity. Gavin named a branch without change addresses a "noprivacy" branch:
http://bitcoin.stackexchange.com/questions/1629/why-does-bit...
I'm aware of that, it's part of what I was trying to say.
>Gavin named a branch without change addresses a "noprivacy" branch:
That branch apparently just sends it to the sending address.
There are other reasons not to reuse addresses unrelated to anonymity, see https://en.bitcoin.it/wiki/Address_reuse.
So I still don't see a design choice that is specifically for anonymity.