I'd rather it be explicit please. I'm guessing an implementation could take the option of 'blowing up', given an invalid xpath expression. As the document stands, it is not making a requirement as to conformance. In other words, I don't think the API itself needs to make statements about conformance of the given expression implementation. It only needs to make sure the API is rich enough to support the needs of the expression implementation.
Variables seem like a kludge looking for elegance.
As per my comment above. For the Expression object, you can't have the parser parse them out, since you may want to use a single expression object and pass many different variables to it. This expression can be compiled once, but then used millions of times over the course of the servlet's life. Valid use case.