そこまでの話じゃないだろ

struct { int a; } b, *c;
の b, *c とかを書けるような文法にしたら
; が必要になるのは必然だ

「b, *c とかを書けるような文法にしたのはなぜか」は「そうしたから」としか言えないが、
そう書けるようにするという条件で考えれば ; が必要になるのにはちゃんとした理由がある