Это не сортировка, а аггрегация.
Можно ли перебирать массив 1 раз используя usort?
Можно, но не нужно так делать.
или придется в ручную пилить функцию?
Выбираем подходящий алгоритм сортировки.
Проходим по коллекции.
Делаем срез по 10 элементов.
Возвращаем результат.