What I'm picturing is your VC instead of tracking the state of files tracks the state of the AST and diffs are tree modifications not line diffs.
---
One con is I guess you can't comment anymore unless you're preserving slightly more info than the AST