SDL offers you the possibility to use double buffering. This allow you to have the performance of hardware surfaces, without any flickering.
The fact that all benchmarks won't go above 78fps when double buffering is activated is because the buffer flip function waits for the previous frame to finish its transfer to the hardware, if not already done, and the hardware is capable of pushing 78 frames in a second. If that limitation wasn't there, you'd obtain the same numbers you can have with hardware surfaces only.
Just do a quick comparison of the benchmarks that use to push less than 78fps on dingoo, with gpmark compiled with SDL_SWSURFACE then SDL_HWSURFACE | SDL_DOUBLEBUF. For those benchmarks, you'll see that the second binary is much faster while outputing a nice and clear picture.
The reason why it's flickering on GP2X and Caanoo, is that while SDL will gladly accept the SDL_DOUBLEBUF flag, the kernel needs to support it. This is the case for OpenDingux, but neither the legacy Dingux kernel, nor the kernels on GP2X and Caanoo implemented it. Which is a shame really, since that would be a huge improvement.