But how does the Rust compiler do that? What does it actually check? Could I write a compiler in C that does this check on a piece of Rust code?
C is so simplictic, that if I can write a piece of functionality in C, I must understand its inner workings fully. Not just how to use the feature, but how the feature works under the hood.
It is often pointless to actually implement the feature in C, since the feature already has a good implementation (see the Rust compiler for the memory safety). But understanding these features, and being able to mentally think about what it takes in C to implement them, is still helpfull for gaining an understanding of the feature.
You are in a contract with the government. Maybe an involuntary one, but still a contract. This contract gives you rights and benefits, but also obligations and responsibilities.
When the government does not uphold their end of the contract, or changes it to essentially only obligations for you and no benefits, then it becomes extortion. Still not exactly theft, but closer to what you mean.
However, the vast majority of people get benefits that far outweight the costs of the contract. Safety, transportation, education, utilities, etc.