What surprised me that it is not returned to the same wallet which it was sent from
It
IS returned to the same
wallet which it was sent from.
It is not returned to an address that is visible in the "Receive" section of that wallet (since it wasn't "received" from anyone, it was simply kept under the control of the wallet.
and more so that this "return the difference" wallet (or address) is not visible in Receive addresses in bitcoin-qt client.
For the average user that just wants to be able to use a program to send and receive bitcoins, it would be confusing to have unknown addresses popping up in their "receive" section that they never chose to create.
Why just not return change to senders address or at least to address visible in receiving addresses book?
There is no such concept as a "senders address" in the bitcoin protocol.
Since it is a bitcoin "best practice" to use a new bitcoin address for every transaction (to increase anonymity and security), it would be a bad idea to send the change to an address in the "receive" section (since those addresses are created by the user for specific purposes, and are either already used or will soon be used).
Imagine, I sell a product to someone in exchange for 0.5 bitcoins. I provide a brand new bitcoin address to the buyer so I will know when they have paid. The buyer decides not to make the purchase after all and never sends payment. Then I create a transaction paying someone else for something, and 0.5 bitcoins of "change" are sent to the address that I previously provided to the buyer. Now I see a payment received of 0.5 BTC at the address provided to the buyer. I can only assume that he has just made payment. I send out the product, and he receives it for free. I prefer it the way it works now. It isn't complicated unless you are trying to understand the technical details of transactions. In that case, it isn't complicated once you understand the technical details of transactions.