Because on Linux, localhost and the box running Docker are one in the same.
On Windows, localhost is the Windows server running VirtualBox, in which is a Linux server, which runs Docker. Docker controls which ports running inside containers on that VM are exposed to the VM’s IP.
If the interface isn’t bridged, then there’s no way for the ports exposed from the Docker container to the Docker VM running inside VirtualBox to be available on the LAN attached to “localhost”.
The reason Docker port maps is because the VM is running many containers, and so you need to specify which ports of those should be available - in exactly the same way as you do for Linux.
If you ran Docker inside a VM on a Linux box, you’d have exactly the same arrangement. Windows isn’t capable of running containers directly. They require a Linux install to do it - either running in VirtualBox or HyperV