You should never typedef a pointer to an object. That’s common knowledge amongst experienced C developers and an immediate red flag, even for myself normally welcoming of anything built with Haskell.
Is this considered harmful because it hides the fact that you're dealing with a pointer in the first place?
If you apply qualifiers like const to your type, results might me unexpected.
It might have semantic benefits, but C developers should be trained to ignore all these strange *-symbols anyway.
While I've great respect for the authors of that fantastic library, I only have this to say about the practice: Jeeesh!
It's all semantic sugar anyway.
I typedef function pointers when they get too verbose. Otherwise not. But it's not the mole hill I'd choose to die on either.