Before you design the actual light, maybe buy a few batteries and LEDs to test.
I just mount stuff up on plywood to prototype. Brass screws / or nails can be reasonable heat spreaders to mount the LED on.
I would think that a single 1/3N could power it and if you need more run time, maybe 2 of them in parallel. You will be able to determine this from your proto testing.
If you are willing to use red or red/orange, (roughly 617 - 660nm range) the Vf is lower than for blue / white and that makes it all easier to do single cell.
Try to avoid thinking of the Vf is a "hard number", it is number selected from a curve of voltage vs current that corresponds to the mfg targeted current for that LED.
While I agree with Lynx Arc in some ways, who cares if it is practical? It is a DIY home made light built for fun / hobby / intellectual curiosity. Unless you are talking about attempting to sell them it doesn't matter much. I do agree that if you plan to use it a LOT, then battery cost can become an issue.
For a small light, a resistor is much easier to implement than a boost circuit and that saves considerably on cost, space, complexity, etc.
One word of warning - when I started playing with LEDs, they were not nearly as bright as they are now. You will be sitting very close to the LEDs, turning them on/off, most likely in moderate to low light conditions and there is a tendency to stare at how cool they are. Consider to have some sunglasses around.
As far as what package is "practical", I like CR2s but that might be too large for your goal.
In some ways, keychain lights are not needed much any more because that function is built into most cell phones. A tritium vial is bright enough for some uses and the phone on the higher demand side. Keychain lights are sort of squeezed out IMHO.