Thinking outloud: Using a listener to dynamically add regions sounds fine, although each region has its own overhead, that is storage and CPU costs. Maybe 1000s of regions is fine, but what about 10000 or more? And you might want to consider what happens when a region is empty, i.e. consider how region de-allocation works.
It might be easier to extend and/or implement your own eviction policy that tracks regions. I would probably prototype and test your solution than go to the trouble to implement a new eviction strategy, however.
From what you say, I guess, that whenever I add a new Node, which is not in a previously created Region, JBC dos not create any Region`s specific infrastructure, so it is applying whatever configuration is configured for a topper lever region.
Is this infrastructure so costly in means of memory?
If I do a remove on Cache.ROOT, is all this infrastructure removed and freed? Also for subregions?
I guess that it is not possible to create a RegionCreated event in cache listener, since creating a node with a new FQN (a region that was not explicitly created) is not creating any region infrastructure?