Yes what you want to do is perfectly possible if you write the code correctly.
Don't use the delay() function as this ties up the processor and you can't do anything else.
Basically write it as a loop that has a variable, let's say nextChange that contains the value of the millis() count when the next change should happen. Then each time round the loop check this wit a :-
if(nextChange > millis()) {
// do the next light change
nextChange = millis() + 10 // this will do the change every 10mS
}