Tengo algunas dificultades para entender la aplicación de las funciones de devolución de llamada. ¿Dónde lo usamos normalmente? ¿Lo usamos en frontend?
Realmente depende de lo que estés haciendo. Yo, personalmente, prefiero usar async/await sobre funciones de orden superior (también conocidas como devoluciones de llamada). Encuentro que las funciones de orden superior pueden ser útiles al escribir un manejo de errores más complejo para las API de back-end. Aquí hay un poco de lectura que puede ayudarlo a decidir cuál usar y cuándo.
https://adrianmejia.com/callbacks-concurrency-in-javascript-node/
https://vegibit.com/javascript-callbacks-vs-promises-vs-async-await/