Да, объединение может содержать другой союз:
union foo { int x; double y; union bar { char blah[10]; char *blurga; } bletch; };
Я не могу думать о ситуации, когда это было бы полезно (или даже желательно).