Now, I'm not saying there is an obvious way to handle "char* + char" meaningfully or safely in C. But on the other hand,
char stackString = "some literal";
is generally handled in an entirely different fashion from
int myVar = 7;
if both are declared as local stack variables - and C programmers generally have no problem learning that "=" is going to mean something quite special when declaring string literals this way, compared to other data types. Because as you say, it's just one more language rule.
The only real places where I miss operator overloading in C are when dealing with strings in performance non-critical places, any time I'm using 3D vectors, and any time I'm writing matrix math. If those were handled as primitives in the language (and as the string literal example shows, C already does go partway down that road), I'd very happily part with arbitrary operator overloading.