The practical downside there is the labour involved in manually creating, using, and maintaining that type union.
If, instead, that functionality were part of the language (so-called "sum types", so you could e.g. typealias Element = Foo | Bar
) it might greatly reduce the need for true existentials (in general, not just for "Embedded" Swift).
Protocols are an existing but more limited tool for avoiding existentials, as well, only for the subset of cases where you care only about common functionality, not unique functionality. They can also be a bit heavy to apply (and the recent clamp-down on "retroactive" conformance further limits their applicability).