A recent "real world" use of a function generator was to test the sensitivity of the human eye to flicker when designing a multiplexing scheme for multiple RGB LED's. Read all the references you wish, you'll still be left with lots of variables. 24FPS is fast enough for old film-based movies, so that must be OK, right? Except that LED's have a faster rise and fall time. 30Hz is fast enough for LCD/LED based displays, so there you go, eh? Except that 2D arrays average differently in your field of vision than (nearly) discrete points of (nearly) monochomatic light. And so forth.
So I turned on the function generator, configured it for pulse output, hooked up some LED's, got several volunteers, and varied the brightness (amplitude), duration (duty cycle), and refresh rate (frequency) as my "subjects" viewed the LED's in various ambient light levels. We learned a LOT in a very short time, and it was ridiculously easy to vary every parameter.
Could I have done this without a function generator? Sure. But it would have taken a lot longer, and I wouldn't necessarily have had such accurate (and repeatable) results. I could vary frequency by single integer Hertz. I could vary duty cycle by single digit percentages. I could vary brightness (amplitude) by tenths or hundredths of a volt. All from a convenient front panel with a nice user interface and keypad. I spent my time learning and gathering data, rather than creating and fumbling about with some Rubed-up test jig.
And this is just one, perhaps less obvious application for a function generator. They're also great for their usual purposes too. A scope and meter are more important, but once you have a function generator you'll likely never go without one again.