Within openLCA, the internalId of an exchange is not mutable. The requirement is that it is unique within a process. The process contains a field, lastInternalId, which tracks this value; it is always incremented so that an exchange never receives the same internalId twice. The pair (process.id, exchange.internalId) is unique (and is used in product system links).
An exchange is not a standalone entity in openLCA; it always exists within a process. That process provides the context (such as location, industry sector, etc.) that could be used for this "edge-based impact assessment" (very interesting, thank you for sharing the link). In fact, this is already done with the regionalization feature in openLCA: if not defined for the exchange, openLCA uses the location of the process and matches it with regionalized characterization factors.
And yes, there is more to explore (such as handling sector-specific CFs). However, I do not currently see how UUIDs for exchanges would help here.