Realdmd is a device that is build of leds. Most common is 128x32 leds, but some dmd'have more leds, but most pinmameuses 128x32 pixels.
Virtualdmd is a the
DMD displayed on a screen. It simulates a real dmd.
Pindmd is a real dmd supplier (thought it has 3 versions, where the pindmdv3 is the rgb version)
Pinmame has ots own virtual dmd that can just use the basic colors. To have more advantage you can use external dmddevice via dmddevice.dll. this isa dll that does do the magic: freezy's supports color roms, alphanumeric display (with nice shining characters). This can be showed on virtual dmd, but also on multiple differrent realdmd devices.
Lucky has also a dmddevice.dll. This was mostly for his own hardware device (a name that is forbidden to say here
), but he makes a plugin, so he can use freezy dll as well. This is because last year lucky added .pac color files that wasn't supported yet by freezy.
Xdmd, flexdmd and ultradmd are frameworks which can be used in programs (some kind of frame work). Most uses also dmddevice.dll to show on real or virtual dmd.
As said by djredick, flexdmd is a 'new' program that can also support ultradmd (but flexdmd framework is easier)
Xdmd is still used by PinballX frontend (but because I had issues with it, I created a flexdmd plugin. It is doing the same, but for me without errors)
I hope this all make sense