Does this make sense:
typedef ReferenceCountedObjectPtr <MyObject const> MyConstObjectPtr;
This should declare a reference counted pointer to an object which is treated as const (cannot assign to data members and cannot call non-const member functions). The problem of course is that the Atomic in ReferenceCountedObject is not mutable.
Or have I been staring at the screen for too long?