1. I don't understand why you decrement the count in operator position
2. I don't see that you increase the count when a procedure is returned from a lambda
Example
(define (f a) a)
(define (g)
(hash-set! H f 1) ; (*)
(f 1)) ;(**)
(define (h)
(pk (hash-ref H f))) ; (*)
(g)
(h)
=> '(#f) as count in your patch is counted up twice (*) and down ones (**) in total count = 1 so you will not maintain the identity of f and you will get a bad printout
Then we also have this example
(define (f a) a)
(define (u) f)
(define (g) (hash-set! H (u) 1))
(define (h) (pk (hash-ref H f)))
(g)
(h)
This will again print (#f) as the count will be 1.
/Stefan