haa, el cast seria porque las funciones tienen como argumentos punteros a char y el puntero a la función espera punteros a void ¿no?. es decir ¿los argumentos de las funciones que son punteros a char se convierten a punteros a void?¿cuando se vuelven a convertir en punteros char?
La función pide como parámetro una función con parámetros void*, y eso es lo que le das.
Si alguien transforma los void* a char*, ese es la función qsort internamente.