Что такое обратный вызов в программировании?
Когда функция выполняется долго, нет смысла ожидать её завершения (визуально это будет выглядеть как зависший браузер, и пользователь закроет сайт). Поэтому ей передают callback, мол, сама сообщишь, когда закончишь работу.
Я применял в Direct Show (обработка видео). Есть сторонний поток, который пропускает через себя кадры. Главная программа может постоянно его опрашивать, не появился ли новый кадр. Но зачем тратить время на опросы, когда они только редко будут возвращать положительный результат? Поэтому главная программа просто передаёт ссылку на свой обработчик (функция обратного вызова), а поток, пропускающий видео будет её вызывать всегда в нужное время (желательно, чтобы обработчик успевал всё сделать быстро).