Every emulator I have tried works perfectly. Any emulator that uses a command like should work without any problems. For SNES I used both PUNES and Retroarch without any problems whatsoever. There are several ways to configure retroarch. One way is to save configs for each core and then launch that config via the command line. The other way is to have retroarch and one config for each system. For example, I make a retroarch folder named Retroarch_SNES, select the snes core I want to use, set the paths for this folder and select save on exit. I also turn off save for each config. Then repeat for each system, say Retroarch_nes for example. Also, make sure the driver you select is gl otherwise you will run into problems. Here is an example of my config:
executable C:\HyperSpin\Emulators\retroarch_snes\retroarch.exe
args "[romfilename]" -fullscreen
rompath c:\hyperspin\emulators\retroarch_snes\roms\
romext .zip;.sfc;.srm
artwork flyer C:\HyperSpin\Media\Super Nintendo Entertainment System\Images\Artwork3
artwork marquee C:\HyperSpin\Media\Super Nintendo Entertainment System\images\wheel
artwork snap C:\HyperSpin\Media\Super Nintendo Entertainment System\Video
artwork wheel C:\HyperSpin\Media\Super Nintendo Entertainment System\images\wheel