Se puede utilizar una retrollamada como aproximación simple al polimorfismo y a la programación genérica, donde el comportamiento de una función puede ser determinado dinámicamente por el paso punteros o punteros inteligentes a funciones de bajo nivel en las que, aunque realicen tareas diferentes, los argumentos sean compatibles entre sí.Si las opciones están identificadas con un hash, entonces se escribe la función tal que haga una retrollamada, haciéndolo lo hace más flexible: su usuario puede elegir qué algoritmo de hash desea y la función continuará trabajando, ya que usa la retrollamada para cambiar los nombres de las opciones en los hashes; así, las retrollamadas permiten al usuario de una función personalizarla durante su ejecución.Se puede considerar como ejemplo el problema de realizar varias operaciones arbitrarias en una lista.En la práctica, la solución más común, pero no ideal, es utilizar iteradores (como un bucle for) que deberán duplicarse en cada lugar del código donde sea necesario.Más aún, si la lista es actualizada por un proceso asíncrono (por ejemplo, si un elemento es añadido o eliminado), en el iterador podría corromperse durante su paso a través de la lista.Una alternativa podría ser crear una nueva biblioteca de funciones que ejecute la tarea deseada con la sincronización apropiada en cada caso.
En otro escenario común, la retrollamada se registra pero no se realiza hasta más tarde, lo que se denomina retrollamada asíncrona.