C does have nested structs/unions/enums but not nested typedefs.
struct A { typedef struct B { int x; } B; }; //WRONG
struct A { struct { int x; } b; }; //OK - an anonymous nested struct w/ an instance
struct A { struct { int x; }; }; //OK - an anonymous nested struct w/out an instance; x effectively belongs to `struct A`
struct A { struct B { int x; } b; }; //OK, the `struct B` type also becomes available in the outer scope
struct A { struct B { int x; }; }; //WRONG, a tagged nested struct needs at least 1 instance
The nested structs/unions/enums can either be anonymous (untagged) in which case they become part of the outer struct/union or tagged.
An anonymous inner struct/union can also get away without defining instances, in which case the inner members become members of the outer struct/union recursively.
A tagged nested struct/union/enum needs instances and it's like an anonymous nested struct/union/enum with instances except the tagged type also becomes available for later use, behaving as if it were a standalone outer-scope struct/union/enum definition.
It might be wise to simply put a tagged struct/union/enum in the outer scope rather than confusingly nest it inside another struct/union.