Once a transaction makes it's way to more, then it becomes harder with each iteration. Who's to say that the next person (or three or eight) knows that they're stolen? As far as they know, they receive coins (or perhaps purchased/traded them) from legit means, not knowing they're stolen.. would you blame each one? I'd guess that once it reaches 10 iterations, it's all but lost.
From a technical side, why is this a problem? The blockchain for the currently generated 166kBlocks is a 4.2GB database (gross, including redundant data). Every single address, every single coin and their transaction path from generation to their currently holding address is available. It does not really need rocket-science to parse that data and trace stolen coins.
But you're right of course when it comes to practice: after several transactions you can not blame users for holding initially stolen coins. You could if e.g. the Bitcoin nodes would check every transaction for black-listed addresses. But this would be a centralized component -- fully contrary to Bitcoin's p2p design.