This makes headers a bit less clean (with the anonymous structs mainly and headers inclusion from another header. Makes compilation with clang a bit less noisy.
This way maintaining the C-API is a bit less tedious job and makes code cleaner to follow. Should be no functional changes.