Multiplexing while preforming other operations

What is the best method of multiplexing a display, while still being able to do other things? For example, reading my RTC and listening for button presses while running though a 4 digit display. The only thing I can think of is to put the display in a for loop, or while loop and give it about 50 rolls or so before going through the rest of my required code for updates. And the button listening could go with the multiplexing loop.

Is there a more practical, or common way?

More practical is blink without delay. I have code that reads button pushes, makes decisions on stuff every 100uS These are all unsigned long currentMicros, previousMicros, hundred_uS_interval

  // *******************************************************************
  // start timing interval

  currentMicros = micros();  // sample the time
  if (currentMicros - previousMicros >= hundred_uS_interval) // more than our interval?
  {
    // save the last time we okayed time updates 
    previousMicros = currentMicros; // save the current time for next comparison


    // do stuff on 100uS intervals

}

okay, so we are updating the display so quickly that we can do it a bunch of times before checking for button presses, and clock updates? then every so often we take a moment to do those other things?

Yes. You could update a counter every time the if condition is met. Every time the counter hits 50, read your buttons. Everytime hits 100, update your clock. Something along those lines.