The screen indeed has 800 pixels horizontally, you may be mistaken about the 480p bit. There aren't 480 physical pixels. The GPU also doesn't output 480p at all.
The 3DS uses non-square pixels horizontally, half the size of a normal pixel. It takes this 800x240p output from the GPU, and displays it on the screen as-is. It's smashed into a 15:9 image since the horizontal pixels are physically half the size of the pixels on the device you're reading this one, which is why it looks stretched on here. It's also why 800px modes look stretched when exported to a file, while it looks normal on the 3DS itself.