So... I was curious about Pokémon self-trading via emulator, so I tinkered with some stuff and ended up cloning apps like RetroArch for the gb/gba/ds games, which are pretty easy to run on mobile devices.
3ds and nsw emulators are obviously more demanding, but with 16gb of ram, my Thor (max model) was not only able to run multiple instances of 3ds games in Azahar, but also multiple instances of switch games like Violet (1.0.1) and Legends: Z-A (2.0.0) in Eden at 720p (imgur gallery w/ settings). There might be a better config, but those settings made the games look and run decent in general. I tried this with multiple turnip drivers (T26, T24, etc.), but the specific driver didn't seem to matter much - as long as it wasn't the default system driver. The instances did freeze/crash occasionally on startup, but once they were both running, I didn't have any issues with crashing. The system also got a little warm, but it's not like you'd be doing this 24/7.
Anyway, using the multiplayer feature, I just had the two Eden instances join the same default IP (one hosted, one joined). They were able to connect in-game and local trade - even when they were using the same save file and trainer ID. Very simple - no need for external servers or a second device or anything like that. The in-game linking was very consistent for Violet. It was fickle for Z-A, maybe taking a few attempts to link, but would always eventually work without needing to change anything.
Obviously all of this can be bypassed with save editors, but I just thought this was really cool and wanted to share. And with config and save import/export, I would actually say it's not that inconvenient... if you've got 16gb of ram anyway.