I am in favor of moving some of those predicates into Blueprints, but, as you said, maintaining identical semantics is tricky.
For instance, Titan supports Text.CONTAINS which works by tokenizing the string in order to match the semantics of Lucene. However, there is the issue of stop words and how exactly the input string is tokenized which are things that are configurable in Lucene. So, in fact, Titan's implementation of Text.CONTAINS is an approximation of what Lucene does.
I suppose that other graph database implementations relying on external indexing engines for index support (which I think is pretty much everybody) have to approach this similarly.