its difficult to guess because there could a number of more or less valid reasons probably all have to do with trying to be backwards compatible and to avoid updating all programs when doing an update.
structs can be (ab)used in many ways, for instance people can have pointers to inside a struct and instead of accessing the struct members through name may wander around using a pointer:
struct {
int a;
int b;
int c;
} s;
and if somebody accesses the struct with
struct s mys;
...
int *p = &mys.a; ++p; ++p; *p = 3;
it will break if the struct has become smaller
As an example Windows (known for its long history of backwards compatibility headaches) has often the size of the struct as first member in the struct, then apps would read that value first to guess what struct version they were working with, this of course meant there would be a number of similarly named structs corresponding to various versions depending on size (shivers).
of course its not by far enough to keep backwards compatibility but it helps.