What you're talking about is not huge risk for a hobby project.. a few things to think about.
It's not really the \$V_F\$ at the operating current that matters, it's the \$V_F\$ at the maximum 'off' brightness that is acceptable. That voltage might be as low as 1.4-1.5V volt for a low-current red LED- in a dark room they can be quite visible with microamperes of current. Driving the output to the 3.3V (nominal level) gets us 3.3V on the output. A fresh alkaline cell with minimal load might be 1.63V/cell at room temperature (just measured one), so 3 would be 4.89V. That leaves you with 1.59V across the LED + resistor (nominal, not allowing that the 3.3V might be a few percent low).
That's way too much to ensure it's not emitting a whole bunch of light.
So, we tri-state it- that allows the output to go maybe a bit above Vcc without much current flowing. 300mV is safe, the datasheet says 500mV absolute maximum. At 500mV, we'd have 1.09V across the LED, probably enough to ensure it's off, at least under nominal conditions. The 'absolute maximum' figure is never a good thing to design to, but usually there's a caveat on this particular figure that allows that voltage or a bit more if the current is limited.
So, I do think this will work (with tri-state, not push-pull), and I also think it's acceptable enough for a hobby project assuming nobody is going to be using a battery eliminator on the circuit in the future*. Keep in mind the margin on the red LEDs is minimal and consider eschewing red in favor of yellow or orange. Or, simply add a silicon diode in series with the red LEDs (one diode can be used for several LEDs).
- If the ESD protection network in the ATMEGA328P does begin to conduct it will tend to raise up the 3.3V supply, out of control of the regulator. This is not a good thing for stability and could conceivably damage something, though the ATMEGA328P-M itself is rated for 5V operation.
I once did something like this in a commercial product (to drive a series string of LEDs with high Vf using a 5V constant-current output), but I designed a power supply with just the correct oddball voltage and appropriate temperature coefficient to match the LEDs and thus optimize the situation. I think the supply was around 8-9V. Worked a treat, easily from -20°C to 80°C (spec was 0-50°C).
My suggestion is that the light is stopping within hundreds of ns and your "photo receptor" is almost 100% of the perceived problem.
A negatively biased PIN photodiode into a GHz transimpedance amplifier is one standard way to get response times down, for somewhat less performance you can also use a negatively biased PIN photodiode into a low resistance (like 100 ohms) and crank up the gain on your 'scope. Higher sensitivity means more PD acreage, which means more capacitance, which means you need a better circuit to keep it fast.
Best Answer
The significant difference here his where the currents go.
With a BJT it doesn't just "act like a switch" - that is the end result you see at the high level, not what it actually does.
What actually happens is you apply a current to the base, and that then flows through the transistor and out of the emitter down to ground. At the same time it allows proportionally more current to flow from the collector down through the emitter to ground.
We'll call these two currents \$I_B\$ and \$I_C\$ for the Base and Collector currents respectively.
So in the left hand schematic, the \$I_B\$ flows through the base resistor, then the BJT, and to ground. \$I_C\$ flows through the LED's resistor and the LED, then the BJT, and to ground. \$I_B\$ is set by the base resistor alone.
But, in the second circuit, \$I_B\$ flows through the base resistor, through the BJT, then through the LED's resistor and the LED. \$I_C\$ also flows through the BJT then through the LED's resistor and the LED. So the LED and its resistor get both \$I_B\$ and \$I_C\$.
Consequently the current \$I_B\$ is being set by both the base resistor and the LED's resistor, and also the voltage drop across the LED. Also the voltage drop across the LED's resistor is not just from \$I_C\$ but from both \$I_B\$ and \$I_C\$ combined.
So from an easy to understand point of view the left-hand circuit is best. However, the right-hand circuit does have some advantages. Mainly because the base current \$I_B\$ is set by two resistors it may be possible to remove one of them (the base resistor) and just have the one resistor in the circuit to limit both the base current and the LED's current. That can save on parts, and if you have a lot of these circuits in you design that reduction in parts can soon add up.