Look at the standard library qsort function, without function pointers implementing such a thing for an ADT in C is basically impossible.
Another common use is where you wish to provide a plugin mechanism, here a structure containing function pointers can provide a C++ like inheritance mechanism that can be very useful.
You often see this idiom in device drivers where it is common for all device drivers of a given type to register with the system by supplying a pointer to a structure containing function pointers that implement the required API.
Regards. Dan.