I don't understand this at all. Prototypes are irrelevant, I don't understand what you mean.
It's another kind of forward declarations, and if we start with structs "just because", where do we stop?
Please explain what you mean about the struct name changing being bad enough. You would get a compile error.
It makes things confusing because they get named differently depending on where they are used. And the error you'd get if you renamed the definition ("incomplete type") is really not as explicit as "no such type", and triggers "huh, what include did I miss?" rather than "oh bummer, forgot to edit this".
Anyway, I really don't get why do this kind of stuff for gaining a couple seconds when compiling. IMO, it makes the code worse for no gain, and although I don't like the very change here, I'm most fearful of where that path can lead if it's taken a step too far.