Hi Michael,
I'm sorry for being MIA and I'm glad that you were able to add the features you needed to your own fork.
I find this change unsettling yet difficult to argue against. The criticism you cited are the same that I would have. I find calling foreign code under a lock to be very hazardous. I'd even say your (2) argument of not going too far doesn't go to far itself! Instead it could be argued that this is a custom eviction policy, so ideally that would be pluggable to allow greater control. Of course that's not possible due to the wide variety and complexities of different types of policies. Your mediator strikes a nice balance, yet with a single use-case and its potential for harm its an uneasy change.
At the moment I'd be inclined to recommend leaving it as a fork, since you've handled that successfully. I'd be open to debate the idea more, though.
That said, I do hope to start working on JDK8 rewrite of Guava's cache soon. This feature wouldn't be included in a more general purpose library as it is too error prone. Its fair to say that CLHM can put more trust on its users who want more low-level control. I would argue that I expected them to fork it and embed, like you did, because every special case is different. So the more torn I am about this proposal the less I can justify adding it.
Best regards,
Ben