It's tricky to get that to work: When making a reference to the shared thing from another shared thing, the shadow has to be bypassed correctly. That adds more tests and different code paths in many places.
I'm investigating another somewhat similar approach that temporarily records refcount changes thread locally, and then combines it with thread local gc: http://www.cs.technion.ac.il/%7Eerez/Papers/refcount.pdf. For starters, afaics references from the stack are never counted, instead the stack is scanned. And a stack scanning gc appears to be necessary anyway. It's a long paper, but it looks promising.