Anywhere when you need to call different functions depending on some condition. Specially Some call back.
Say When I call a function to fetch some data from a remote server.
Now if its a synchronous call my caller can hang.
So now the function which does the job takes some function pointer which is called when the job is done.