Programming an Atxmega for using UART
Yes, that is one valid way to do it (also my preferred way). Store the characters in your interrupt, use them when you have time (usually in your normal infinite loop).
What you will usually use is a ring buffer with read/write pointers to not lose or overwrite any characters. 

Multithreading is actually possible, but you will have to implement it yourself (or use some OS for your µC), plus, it's not really different from what you do in your infinite loop. You might want to look at FreeRTOS or Micrium as examples.