If you have a lot of things that need to be done quasi-simultaneously, then a cooperative multitasker does make it easier. I have one for the Arduino at GitHub - dc42/arduino: Reusable modules, drivers and patches for the Arduino platform. The idea is that you write each task as a function that takes only a short time to execute, and returns an integer indicating how long it should be before the task should be executed again (if at all). I normally use a system tick rate of 1000Hz, so each task function needs to execute in at most a few hundred microseconds.
You need to be careful what library functions you call, because if you call one that blocks for a long time, it will stop other tasks getting executed on time. For example, if you use the LiquidCrystal library, don't call the clear() or home() functions, because they take a long time; also don't write more than about 10 characters in one execution of a task.