The following schematic will do what you ask, I think:
simulate this circuit – Schematic created using CircuitLab
\$Q_1\$ can be any small signal PNP BJT and \$M_1\$ might be a BSS123 or BSS145 or any of a list of small signal NFETs.
The timing of the circuit depends upon \$R_1\$, \$C_1\$, and the threshold voltage of the NFET you choose.
The circuit requires the use of \$M_1\$ because there's no gate current to speak of. This allows the RC timing to be selected over a very wide dynamic range of possibilities and for extended periods of time. (A BJT in its place would not allow such a dynamic range and would greatly complicate extended periods of time.)
\$Q_1\$ is isolated from the timing issues, so it's just operated as a "switch" to supply the needed current to your LED when it is turned on by the momentary push-button \$SW_1\$. Note that \$Q_1\$ appears to parallel \$SW_1\$? That's for a reason. When you press the push-button, the circuit causes \$Q_1\$ to activate and bypass the push-button. So when the push-button is released, \$Q_1\$ stays on, keeping your LED on for the timed period, and thereby replacing the need for holding down the push-button. By the time you release the push-button, \$Q_1\$ is already active and taking over, supplying current to the LED until the timing period expires.
The BAV99 is a 2-diode part with three pins. If you feel okay grabbing up one of those, use it. If not, there's really no serious need for \$D_2\$. But \$D_1\$ is required (to speed up resetting the circuit when the timing is over.) So you can use a 1N4148 for \$D_1\$ (or some other small signal diode of your choice, I suppose) and just eliminate \$D_2\$.
This circuit also completely debounces your push-button switch. So it should work consistently and as you would want to expect from it.