Two keys to readable C declarations:
1. Just read the clumps in a given decl backwards.
2. Keep the decls of individual concepts in code small enough to grok without breaking your brain. While decls can be mechanically complex, ability to reason about and maintain code is a paramount factor. For C, typedef, struct, nomenclature are friends.
You know, returning an array of triplets of function pointers each of which accept more gloop can be made to be understandable with judicious application of the above. I'm given to understand that this overall approach is all the rage in the Go community ...