They did not build a current limiting function into the chip, however they are CMOS drivers, and by their nature increase their resistance the warmer they get, so they will generally safely self-limit on a per-port basis (although you could end up driving more than 20mA through a given LED, which might exceed the LED's rating) as long as you keep the voltage low (ie, each port doesn't have to drop more than a volt or two above the diode).
But the supply lines internal to the chip cannot handle all 8 lines being maxed out.
It's not ideal to do this, as you are stressing the part, but if you really want to drive an LED without the resistor, as long as you don't exceed the aggregate current, you are ok.
However, you can get around this by running the LEDs in a PWM manner. Only drive one LED at a time, but sequence through them quickly enough that they appear constantly on to humans, even though you're actually blinking them at 30+ times per second individually.
Still, resistors are cheap, so unless you have a great reason to drive them directly with no current limiting, it's best to design the circuit so that both the microcontroller and the LEDs are operating within their design limits.