Imagine you have thousands of routes which all point to the same next-hop. Now normally, without indirect-next-hop capability, if the next-hop changed due to some reconvergence in the network, you will have to update the next-hop for many thousands of routes, which could take a lot of CPU cycles to complete.
Route1 ---> next-hop x.x.x.x
Route2 ---> next-hop x.x.x.x
.............
Route x ---> next-hop x.x.x.x
Now, imagine using simply a pointer, where all these thousands of routes simply point to this pointer. Now this pointer itself actually references the actual next-hop in use. Now, if the next-hop changes, instead of having to change the next-hop to thousand of routes, we can simply change the next-hop that the pointer is pointing to. The actual routes still continue to point to this single pointer so there is no need to modify many thousands of routes. In this case we just need to make one change, which saves many CPU cycles and dramatically improves convergence times, especially as the number of routes grow...
Route1 ---> Indirect Next Hop Z
Route2 ---> Indirect Next Hop Z
.............
Route x ---> Indirect Next Hop Z
Indirect Next Hop Z ----> next-hop x.x.x.x
HTHs.