[…][C] doesn't let you define many nice abstractions or write code in general and terse ways.

I think that it's definitely possible to make nice abstractions and write code for general situations. I haven't messed around with C23's new auto and typeof, but if you're looking for generics, you can probably combine those with macros to get something like that (although admittedly macros also suck). As for terseness…well, just ask the participants to the IOCCC. I kid, of course, but while that's an extreme example, i do think it's certainly possible to write terse code in C.