Session reference counts are meant to count the number of external references to the session (i.e., references held outside of the protocol.) If a protocol must keep track of session references internal to the protocol itself, a separate mechanism must be used.
This requirement is driven by upper protocols which require that when they release all of their references to a lower session that the session's reference count goes to zero. Virtual protocols which manipulate lower session's upper protocol pointers are specific examples of these upper protocols.