T-Aoki I actually have an EMS card in my XT, today.
EMS is a kind of pure PC(/XT) thing. With the 286 came XMS.
They're actually a same thing, interfaces provided by DOS drivers to equip possibility of mapping large amounts of RAM to real mode code. They both use windows e.g. 64k segments in conventional memory area to map or copy the stuff from the "backend". In EM case the backend is chip card over the bus, in in XM case the backend is the system memory accessible under protected mode.
The XMS stuff is IBM/Microsoft lead way to remove the chief impediment of 286 to PC adoption which is access the new amounts of RAM from old code.
As these two are just interfaces, they can be backed by anything. With vm86 on 386 it was possible to intercept anything, so EMM386 driver can use the >1MB memory to provide EMS support. There are also drivers that provide XMS backed by EMS.
Messing around EMM386 and HIMEM.SYS (the 286+ XMS driver) was an usual procedure to run any demanding DOS software (games) that had real mode code, which is many 90s games. 32-bit protected mode DOS via DPMI extenders is probably another (off)topic but still a lot of good 90s titles did not use them.
As such, I can run many 286 games requiring 1MB+ RAM on my XT. All these games require is 80186 (286 is 186 with protected mode) instructions, and XMS memory. And a XT with V20 CPU and EMS card can do both.
... and then there was overlays, which brought a whole lot of other problems to the party...
IMO the most complex area of PC programming is graphics. With VGA you can almost arbitrarily set up video memory organization and pixel sequencing. There are some 'custom' e.g. non IBM advertised modes that have unlogical planar organization, which makes working with normal assets or normal drawing procedures really hard, but it allows to use vram latches to perform internal copies.