no one is stopping you from importing k8s types as protobufs and writing a program to talk to k8s api via protobuf encoding. all the types are already protos (except CRDs). it's just not the most user-friendly way so most people don't use it.
Isn't this basically crossplane? https://www.crossplane.io/
no, you don't have to resort to imperative protobuf slinging.
https://tanka.dev/
https://www.pulumi.com/
And plenty more exist today. But helm got popular first, so due to the collective action problem it's going to take the industry forever to switch off it.