Это может понадобиться, если в твоем компоненте используется какая-нибудь хрень, которой удобно управлять не через изменение пропсов (стандартный react-way), а через
вызовы функций. Ну вот тот же пресловутый инпут или текстареа - у него есть штуки, которые не отобразились на пропсы, например выделение текста.
Соответственно, чтобы вызывать функции, нужен экземпляр - что-то вроде viewModel для твоего компонента. И тут два пути: либо ты вручную создаешь этот объект, просовываешь через проп, и компонент к нему "подключается", либо компонент сам создает сей объект и возвращает тебе, уже с помощью рефа. Вот useImperativeHandle реализует второй способ. При размонтировании, реф обнуляется, компонент "заметает следы".
Пример из более-менее известного - библиотека Формик
https://github.com/jaredpalmer/formik/blob/main/pa...
formikbag - тот самый "объект с методами". Он создается через хук useFormik, но конкретно здесь компонент Formik сам это сделал и отдал тебе