Everything seems to work well so far except that it seem like I'm not seeing all the games (possibly versions and variants). It might be because I have "merged" ROMs though. I can use CLRMAMEPRO to convert them into "split" sets if it makes a difference in Attract Mode.
Yes, you see this because of the merged set. Split sets will work differently. Your method using the hash files might overcome this but I'm not certain. Using third party tools might also help or you could convert your set as you mentioned above.
As an aside, it seems like each of my console/systems that use a software list is basically set up the same way more or less with the only variables being the "system" tag e.g. a2600, coleco, nes, ect... in the various places they appear and the full name of the system. It's easy enough to copy and rename one of the existing configs and do a search-replace on the system tag. But it seems like there should be a way to parse the mame.xml and/or listsoftware output and/or the XML files in the hash folder and generate a config for each system automatically.
Setting up the systems is a one time thing. I'm sure it could be automated but I don't think most care too much since this doesn't take much time.
If a tool for that doesn't already exist, I my try my hand at writing one.
I have seen several over the years. Romlister works well but there are others.
I have a somewhat related issue with configuring MAME properly in Attract Mode.
At the moment, my MAME list includes a bunch of home computers (and consoles, I think). Is my config incorrect or do I need to do additional work to filter those out with catver.ini and/or custom filters?
Keep in mind that there were actual arcade machines that played Nintendo and Sega games that were similar or the same as the console version.
You need to decide your end goal. It's different for everyone. MAME is great and include tons of games but I wouldn't want 90% of them on my cabinet. I will never play any computer type game or most console games there. Personally, I like the no-intro type of sets/databases because I use very few clones and focus on games that were available in the US. Curating your romlists is the key to an easy to use system. This can be done manually, with tools, with filters, with databases (xml files) from other systems or emulators. My advice is figure out what you want in the end and the best or easiest way to get there. A lot of people think it's cool or important to have as many games as possible (I was once one of them) but this is really the wrong direction if you want a clean and easily navigated system.
Just because you have a rom it doesn't mean it has to be in one of your active romlists. I don't delete or move roms I don't want see or use, I just make sure their hidden via the romlist or filters. A simple trick is to create your complete romlists and call them xxx_all.txt (mame_all.txt, nes_all.txt, etc.) and then create your curated romlists. Make a copy of your attract.cfg and point it to your complete romlists. This will allow you to have a clean system but toggle to a complete system by simply swapping the attract.cfg files. I also like to have multiple attract.cfg files to quickly change complete layouts to keep things fresh but that's another discussion.
P.S. I should also mention that romlists can be generated from the command line using xml files from other systems and these commands can also use filters. This can be a helpful and powerful tool when building your ideal setup.