Back in the day I just implemented M20 the way the underlying x3g protocol works. So GPX only returns the list of files in the current directory. "Playing" a folder changes the current directory to it. Making it more Marlin like would require the plugin to have a multiple call and response conversation with the printer. Can be done, but haven't got around to it.
SD prints should work. At one time it was the recommended way to print since you're less likely to get serial pipeline pauses that cause zits. It's a bit of a pain though since upload to the SD card over serial isnt supported, so you have to do the SD card dance unless you have a FlashAir.