I've done a bit of NES programming and really enjoy trying to cram stuff into such a tiny system.
One benefit of developing games for these old systems is that they are not moving targets. For hobby programming, you probably don't want to keep testing and recompiling old stuff to keep up with OS updates.
Even better, you'll have a small army of emulator developers making sure your games will work forever on every new platform. That includes browsers, since there are Javascript emulators for many systems. If your games are particularly tricky to emulate, that's no problem. They will probably be added to everyone's test suites.
I liked the 32F746GDISCOVERY which is $56 at Digikey. It has a Cortex-M7 CPU, 1 MB built-in flash, 8 MB of SDRAM, and a 480x272-pixel touchscreen. Games can go on a microSD card. There's a USB OTG port you can use for input.
A low-res screen like this works well because the chip can't rescale its video output.
ST provides libraries for all the peripherals so it's pretty easy to jump in if you know C. I think microPython works on a lot of these boards, too.
I guess it depends on which part you think is fun. Using a big microcontroller is more about pushing the hardware to its limits. Using a small Linux system is about taking advantage of existing libraries. The Playdate has an STM32F7 and it seems to do pretty well as a console.
Something like an STM32 Discovery board is a good option for recapturing the mid-90s magic. You can get a ~200-MHz Cortex-M4 or M7 with a few MB of flash, external SDRAM, and a display for less than $100. They have really basic hardware 2D accelerators.
The on-chip peripherals are well-documented, but off-chip peripherals require some digging to figure out how to program correctly.
You can debug with GDB surprisingly easily, or find a Forth to throw on there and just start poking registers.
I've been bitten by reordering. In my case, the toolchain developers implemented the reordering step in the assembler as an extra optimization step (on by default of course), so I had to disassemble the binary to even find the problem. They had redefined the assembly language semantics to require "volatile" keywords wherever you needed ordering maintained. I turned that particular optimization off.
It's tough but doable. You have to get on people's calendars a week or two out whenever you can, and if you're lucky, it eventually turns into easy, low-stress, open-ended playdates.
Meeting other parents is a huge effort, though! It's basically dating all over again. If your kids ride the school bus, that's a big help because you automatically meet nearby parents who are home in the afternoon. Otherwise, you have to go to lots of events and ask parents for their phone numbers, but the majority don't work out for random reasons.