Its a bit tough to say without knowing how you game "flow" is put together.
Not something that you could easily explain I think.

But as an idea, how does this sound.

Have three separate player "action"s and when the player shifts from
one game-mode to another, the currently running action calls the next
action type and then aborts itself.

EG.
Code:
action player_explore()
{
   player = me;
   ...
   while(1)
   {
      if(key_w)   c_move(me, forward_vec, NULL, ....
      ...
      wait(1);
      if(mode==2)   {    player_combat();     break;   }
      if(mode==3)   {    player_CutScene();   break;   }
   }
}

action player_combat()
{
   player = me;
   ...
   while(1)
   {
      if(key_w)       c_move(me, forward_vec, NULL, ....
      if(key_space)   attack();
      ...
      wait(1);
      if(mode==1)   {    player_explore();    break;   }
      if(mode==3)   {    player_cutscene();   break;   }
   }
}

action player_player_cutscene()
{
   player = me;
   ...
   while(1)
   {
      if(key_w)   camera.tilt += time_step;
      ...
      wait(1);
      if(mode==1)   {    player_explore();    break;   }
      if(mode==2)   {    player_combat();     break;   }
   }
}




"There is no fate but what WE make." - CEO Cyberdyne Systems Corp.
A8.30.5 Commercial