Use reflection has a performance hit. If we use duplicate wrappers, the only problem is the synchronized methods used for check if EL is available, but since this code is called many times, use those methods are not a good idea. We have to check which solution has better performance.
Other idea we could use is make TagValueExpression implements FacesWrapper, so we can get the inner ValueExpression and call it directly.
If there exists other ValueExpression wrappers that need to be handled, we need a list of the ones required to change in myfaces.
The signature of ValueExpression.getValueReference is this:
ValueReference getValueReference(ELContext context)
My question is: Does really match the method with the proposed signature?
Object getValueReference(ELContext context)
If so, maybe use reflection is the way to go, but we have to try.