Can these sorts of primitives be used to create broader "architectural" linters?

Yes, and I use them often in the context of writing adversarial ‘go vet’ style anti-slop analyzers that run pre-commit.