I think I've identified a difference between Gnash and MAME/MESS pertinent
to this thread -- a requirement of nonfree code:
MAME requires nonfree code (game ROMs) to run the game. As far as I know
all MAME ROMs are nonfree.
MESS emulates many computer systems and (of the code I've seen so far) each
emulator loads nonfree system ROMs in addition to running whatever program
the user wants emulated under MESS. Therefore, for example, if the user
wants to run a free program on an emulated Apple IIgs, MESS will load ROM
files as well (read the ROM_LOAD() calls in src/mame/driver/apple2gs.cpp to
see the names, CRCs, and SHA1 hashes of these files). I'm presuming that
these ROM files are all nonfree as I am not able to find source code for
any of them.
Gnash can be run completely in freedom: Gnash requires no nonfree code to
play a free Flash program. As far as I know, Gnash has no nonfree
dependencies (despite being useful to play nonfree Flash programs).