Currently HasContainer is final. This means that Graph implementations cannot support their own type systems across the entire traversal.
Given the traversal:
g.V.has('foo', nonTinkerpopType).out('bar').has('foo', nonTinkerpopType)
Say that the initial traversal g.V.has('foo', nonTinkerpopType) is dealt with via strategy, the non-Tinkerpop type can be dealt with. However the rest of the traversal is processed via the default Tinkerpop pipeline, and as such it doesn't know how to deal with type conversions/comparisons etc.