Рассмотри как работает qsort() https://en.cppreference.com/w/c/algorithm/qsortФункция qsort() ничего не знает как и что ей сравнивать (это могут быть и int числа, и float числа так и произвольные структуры например).
Сравнение производит не она, сравнение проводишь ты, написав свою функцию.
Ты передаёшь в функцию qsort, вызвав её алгоритм указатель на написанную тобой функцию сравнения.
И qsort при своей работе часто вызывает написанную тобой функцию сравнения.
Это и есть callback. Функция qsort осуществляет callback.
Колбэки используются при работе с операционными системами или закрытыми чужими библиотеками.
Например так работает таймер операционной системы. Вначале ты вызываешь функцию SetTimer (или там CreateTimer)
передавая ей указатель на свою функцию таймера, которую нужно "дёргать".
А потом операционка сама начинает "дёргать", вызывая твою функцию, адрес которой ты ей передал. Этим она осуществляет callback.
Либо Callback'и используются при грамотно построенном коде, который не надо каждый раз переписывать.
В завуалированной форме это часто используется в ООП.