I will answer the two questions:
1) Why is there a change address?
Because more often than not the user has more coins than the standard amount to mix (for example, 1 BTC).
2) Why is the same as the input address?
Because it makes clear that these funds are NOT mixed. Not only slightly mixed (in my previous example, the output with 49 BTC is obvious where it came from). There is no such thing as "little unsure". Funds are completely anonymous*, or they are identifiable. And I chose to make it clear in the protocol.
I would like feedback in the protocol itself. For example, how can a transaction be re-identified, or under which circumstances the program may be stuck. If you still believe that reusing the change address would compromise anonymity, please give a concrete example of how.
If it is OK, developing the program is quite straightforward. All the tools exist already (it can be even a bash script with the sx tools).
*Under certain assumptions, like for example excluding the other party (this is why the process is repeated several times)