Well, I'm using the AST to power most of the analysis. So the first-order diff is lexical--it works on syntax ignoring whitespace and the like. The second-order stuff, like matching substructures, is based on the first-order diff, but is semantic.
I'm also planning to add more semantic features. In the short-term, I'd like to detect other simple refactorings (particularly renamed variables). In the long run, I might even add very language-specific features (like trying to use type information to help with merging).
I think your nomenclature's wrong, though. If you are comparing via the AST, it's lexical version control.
However, on your second paragraph:
> That is, if you move a function, I can see that as a single action even if you modify the function a little bit when moving it
That already seems a bit more semantic than lexical.