If you use schema-aware XSLT 2.0 then you have the potential for the XSLT processor to do this kind of checking. However, some points:
(a) the processor isn't obliged to do compile-time checking in the way you describe. Saxon does a certain amount, Altova as far as I can see only does run-time checking.
(b) Saxon won't give you errors unless you are careful to declare your types in suitable places. For example, if you write a template rule with match="schema-element(invoice)" and then use the path billTo-address/postcode then it will be able to tell you whether this is a legitimate path. However if you just use match="invoice", then all paths are legitimate, because your template rule can match invalid invoices as well as valid ones.
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference