Yo eso de "correcto" nunca me ha gustado. Hay diferentes formas de hacer las cosas y como tal, algunas te servirán mejor y otras no.
Por ejemplo, yo en vez de accesos directos tiro de .bat, básicamente por que el .bat me permite hacer más cosas, como podría ser lanzar un joy2key con una configuración especial solo para ese juego, etc. Pero como dije antes, esto depende de que necesites y con que te sientas cómodo.
Volviendo al meollo de tu pregunta, piensa que todo emulador es una aplicación de windows (si usas windows de OS, obviamente, que esto de los front-end y emuladores corren en otros OS también), así que cuando lanzas mame, nes, etc. Estás lanzando un .exe que no difiere en nada del resto de los ejecutables de windows.
Lo que tienes que tener claro, es como funciona el front-end, de esa forma podrás manipularlo a tu antojo.
En el caso de AM, la forma de ejecución es
executable + args
Donde la línea "executable" es siempre la misma para un sistema o emulador, mientras que la parte "args" (de arguments) varia según sea lo que tengas como "rom".
Por ejemplo, podría crear un sistema que fuese música, el programa que reproduce la música será siempre el mismo (Por ejemplo VLC) y la parte variable, serán los archivo de música, así entonces podría hacer
executable = c:\archivos de programa\vlc\vlc.exe
args = [romfilename]
Donde romfilename será el nombre del archivo que tiene la música, como podrían ser los .MP3.
Ahora, lo de arriba también se podría reescribir como:
executable = CMD
args = c:\archivos de programa\vlc\vlc.exe [romfilename]
Y también funcionaria, en ambos casos estoy ejecutando un .exe, lo que cambia es el orden, pero el resultado final es el mismo.
Como decía antes, la diferencia es que la parte "executable" es constante, mientras que "args" es variable, así, cuando quieres lanzar juegos de windows, como podría ser los juegos de locomalito, te toparas que cada juego tiene un ejecutable diferente y por eso, lo mejor es que el nombre del .exe quedé en args. Aún así, nada te impide crear un sistema por cada juego y poner el ejecutable en "executable".
Así por ejemplo, para lanzar maldita castilla, si colocas:
executable = ruta al juego\maldita castilla.exe
args =
y te creas una base de datos con una única entrada que diga "Ejecutar" y ya tienes un sistema para un único juego. En contra, será un poco engorroso hacer esto para 100 juegos, de ahí que la alternativa de colocar como executable a CMD y pasar los exe como args sea mejor, pero nuevamente, depende de que necesites y que quieras.