I solved the issue and figure I would post the solution for anybody else who ends up having the same problem.
Start up a ROM and then open the retroarch menu. Click back out of the quick menu and go to settings/inputs/user binds (set up the binds for each player you want). This will get your buttons working, but they will rest once you close the ROM.
To make them permanent click back out of the inputs menu until you reach the retroarch main menu. Click main menu/configuration file/save new configuration.
This will save the changes you made to your binds in a new config file. The file will be located at:
/userdata/system/.config/retroarch/config/"nameofcore"_libretro.cfg (notice it is .config with a period before it)
Now to make things easier its best to move and rename the cfg file. I renamed mine "nameofsystem"_custom.cfg (example dreamcast_custom.cfg). I then moved this file to:
/userdata/system/configs/retroarch/"nameofsystem"_custom.cfg
You don't not have to move the cfg file to the location I did. You can set up any folder structure you want and put your custom cfg files in there.
Now to make this load when you start your ROM you will need to add a line to the batocera.conf file located at:
/userdata/system/batocera.conf
Open this with notepad++ and add this line at the VERY bottom (make a new line):
"nameofsystem".configfile=/userdata/system/configs/retroarch/"nameofsystem'_custom.cfg
(EXAMPLE: dreamcast.configfile=/userdata/system/configs/retroarch/dreamcast_custom.cfg)
Now save your batocera.conf file. When you start up your ROM your keybinds will be how you configured them in step one. This method works on a per core basis. So it will effect all ROMs that use that specific core.
However, you can also set this up to work on a per ROM basis. To do that you will need to have already completed the steps above. To make it easier on myself I created a new folder for the per ROM .cfg files at:
/userdata/system/configs/retroarch/dreamcast/
Copy your "nameofsystem"_custom.cfg file into the folder you created. You will then need to rename this file to "romfilename".cfg. This needs to be the entire file name, including the type.
EXAMPLE: deadoralive2.cdi.cfg (notice I included the .cdi)
You will need to go back to your batocera.conf file and add another new line below the one you just did. It will need to look like this:
dreamcast["romfilename.cdi"].configfile=/userdata/system/configs/retroarch/dreamcast/romfilename.cfg
EXAMPLE: dreamcast["deadoralive.cdi"].configfile=/userdata/system/configs/retroarch/dreamcast/deadoralive.cdi.cfg
Now save this change. Open the ROM you just set up, enter the retroarch menu, click back out of the quick menu then go to settings/input/binds. Set up your binds for this ROM. Then click back out to the retroarch main menu and click main menu/configuration file/save current configuration. This will now save your binds for this ROM only.
You will need to do this per core if you don't want the same button binds across every system.
Now I'm sure there is an easier/faster way than what I did. But you cant argue with the results. Hopefully this helps somebody else who was about to throw their Pi/PC across the room like me.