Technique to drive seven segment displays with external components
1) Yes that's correct. If your GPIOs can source or sink 4mA you can't ask them to source or sink more, they probably are overcurrent protected but they won't work properly.

2) That may be because other designs use "stiffer" GPIOs that can source/sink all the current that is needed.

3) That is a great idea. You can use a mosfet or a transistor, just like you do on the high side. Why are you using a NPN bjt for the high side anyway? A p-mos or a PNP bjt would be better in my opinion.

The schematic is simple:







simulate this circuit &ndash; Schematic created using CircuitLab

Remember that when sizing the limiting resistor you should take into account Q1 saturation voltage and Mx on resistance (that's quite low actually).

Pay attention to maximum mosfet \$V_{GS}\$, 5V might be too much, and be sure that Q1 is fully saturated also when every segment is on, i.e. when its collector current 80mA. Of course its collector current rating must be high enough.

As I said you should probably use a p-mos for the high side switching, currents are low so you can find something suitable for your application. Please note that a NPN bjt might not be suitable since the micro controller output is lower than 3.3V, then you have a \$V_\gamma\$, that's another 0.7V, then the LED, then the N-MOS... If the micro output is too low your leds might not light at all.