20 LED parallel 3V

Not needed!

By the way, 2xAA is not enough for running an LED string.

I have a string of 20 sitting right here on my desk running off of 2AAs

ALL LEDs need some form of current limiting.
Some strings may have this built in already, then it's not needed. If OP is using bare LEDs (they did not specify their string!) they definitely have to add those resistors.

Won't be very bright... or when your battery is halfway empty they stop working... unless of course it's traditional LEDs in colours like red, yellow and green, in which case the forward voltage is much lower and indeed they will do fine on 2xAA. As long as there's some form of current limiting in place as otherwise they will burn. I know in some cases, especially cheap Chinese made strips, they don't put a resistor in - they skimped enough on the wire thickness to have enough resistance there... Poor engineering but for cheap consumer products that have to last a few weeks (one Christmas season) it'll do just fine.

What limits the LED current, a MOSFET would cause it to draw more current. Also at these voltages come colors may not work. Check the Vf of the LEDs.

Very bright white LEDs

or when your battery is halfway empty they stop working.

No they don't

A built in resistor

a MOSFET would cause it to draw more current

How can a MOSFET cause the current to increase? It makes no sense

You no longer have the Vce voltage drop so you will get about 0.7V more to the LEDs. At 3V that is about a 25% increase in voltage.

Typical Vce (sat) for a BC547C at 10mA Ic is only 0.09V. Where did you get 0.7V?

You are also assuming a MOSFETs have a zero Rds (on)

Is it really 10 mA for 20 LEDS though? if that's the case, you can drive them from an Arduino GPIO.

I can't see how

So Vce (sat) is irrelevant at 10 mA. It probably has a max value of more like 0.6V at a more likely 100 mA.

You are arguing a moot point.

0.5 mA is plenty for modern LEDs to shine quite brightly, so that's 20*0.5 mA = 10 mA for the set. That's a little less than what my decorative LED strings get, 100 LEDs running at ~70 mA. So it's very plausible.

Okay, that's the kind of information that is useful in a discussion. We don't know what sort of current OP's LEDs consume, whether or not there is a built-in current limit resistor or what color(s) they are. If OP's string really does draw only 10 mA then they can probably power them from a GPIO.

@scary3dcat
Try powering them from an output pin through a 330R resistor.

built in where?

At one time they manufactured LEDs that did not need a resistor. They would place a pinch FET (fabricated on the LED die) to act as a constant current device allowing the LED to be connected to a wide range of voltages. There were hybrid versions. Generally this was called a built in resistor. Check this link, the ecnohomics will come into play in choosing: https://lighthouseleds.com/led-component-lighting/12v-led-with-built-in-resistor/12v-5mm-led-with-built-in-resistor-round-top-1.html