Walletexplorer is actually one of the lesser advanced blockchain analytical tools available.
Even if you never reuse addresses, and none of your trading partners reuse addresses, it is still possible to link some of your addresses together. For example, if you send BTC to one person, and send the change to one change address, then send BTC to a second person, sending the change to a second change address, then subsequently send BTC to a third person using inputs from both of these change addresses, then one could reasonably determine that both of the change addresses belong to you, and if more then one input was used for each of the previous transactions, that the addresses from each of the above transactions all belong to you.
In order to avoid the above issue, you can heavily track where the BTC contained in each of your addresses came from, including change addresses.
You can further avoid this by avoiding using change addresses altogether by sending whole amounts contained in inputs to your trading partner in each transaction, although this will somewhat limit you as you may not need to send exact amounts to the person you are trading with. If you frequently trade with someone (and sufficiently trust them), then you could send an extra 0.05 to your trading partner instead of sending that amount to a change address, and you both could stipulate that the 0.05 will be applied to the next time you need to send them BTC.
Alternatively you can use Joinmarket to do your transactions. Joinmarket uses CoinJoin which means that your transaction is combined with inputs and outputs of other people such that an outside observer does not know which inputs and outputs are yours. It greatly enhances privacy, but can be a little hard to use.
CJ transactions can be traced with fairly decent amounts of accuracy (
source -- I had thought there were more recent articles about this issue, but am unable to find them currently).