Well, one attack that I can come up with immediately is to just create a new wallet, transfer the bitcoins from the flagged wallet, then cash out from the new wallet. Your obvious retort would then be "Aha! But how about we just track any transactions from the flagged wallet and flag those wallets too!", sure, but then you open up for an alternative attack where you could get your wallet flagged and then send a minimal amount of bitcoins to some prominent wallet to have it automatically flagged (say the hot wallet of a major exchange), extortion anyone? To solve this we would need whitelists and the arms race goes on and on...
You can track the individual transactions. So if I have some tainted coins and I really do not like you. I know your main wallet and transfer 1$ worth of tainted coins to you. You can just transfer the tainted coins out of the wallet and that is it - the rest of the coins in your wallet are perfectly fine.
That said, tainting is not a path we want to go down. The potential for abuse is enormous, and rendering more and more coins useless.
Except bitcoins are completely fungible. Once the bitcoin is transferred in the wallet, you can no longer make any difference with the other bitcoins in the wallet ; it has no distinct identity anymore.
Think transaction into a bank account : you cannot separate the money that was transfered in from what was already there.
But when you transfer BTC out, even if it's in the exact amount of the tainted coins transferred in, how do you decide whether the outgoing coins represent the tainted ones or the untainted ones?
Say there's a 50 BTC untainted wallet, and tainted 1 BTC is transferred in, then 1 BTC is transferred out. How do you decide whether that outgoing 1 BTC was drawn on the tainted portion or the untainted portion of the account?
Always regards the last bitcoins as the tainted ones. Local wallets could simply treat tainted bitcoins as not existing, thus removing that annoyance too.