I have found a good solution for this issue, that passes all tests done. The idea is create a counter that identify the composite component nesting level and attach it to all created EL expressions, like we do with the Location object. This counter helps to identify the "context" where this EL expression belongs. If the counter is 0, the algorithm works as is working now, but if not, this info is taken into account when the algorithm try to found the composite component.
The hack works well in complex situations, but since the ccLevel is context dependant information and can change, the EL caching algorithm should change a little bit. I have not found any side effects, all junit tests done in that part works, even the ones using "findComponent expression" hack, used to resolve the library name h:outputScript or h:outputStylesheet expressions.
I also tried the example provided and it works. It took me a lot of time to understand and solve this one fully.
If no objections I'll commit the proposed solution soon.