You're asking for multiple forms of logic then, which will require you to restructure your code a little. You'll need to track the state of each LED and the amount of time it should stay On. (maybe you can do this with the same variable.)
In loop(), you'll update the status of each of your LEDs based on their state value and if their timers have elapsed. Then you can do you if-checking for any serial commands. The serial commands can also update those LED state variables. Then on the next iteration of loop() the lights will respond to your manual commands.
puesdo-code will look like this:
currentTime = millis();
check if LED1 should shut-off yet, by comparing currentTime to LED1timeOutValue
check if LED2 should shut-off yet, by comparing currentTime to LED1timeOutValue
set LED1 to the value of LED1state
set LED2 to the value of LED2state ...
Is there anything from serial yet?
update LED1 state if necessary
update LED1 timeout if necessary (e.g. LED1Timer = millis() + timeOutValue)
... repeat for all other serial commands / LEDs.
Example #5 of my tutorial is closest to what you are trying to do. My example doesn't have code to manually update the variables, but that is what you are already doing. So just a small change for that part.
The keys are:
1) every loop, update the state of the LED (no harm if the state hasn't changed.)
2) Determine if you've timed out yet for any of your lights
3) manually update your variables based on serial commands.