NDK покрывает в основном две большие области, которые между собой пересекаются:
1. Использовать существующие, отлаженные библиотеки, которые написаны на C/C++ и которые долго/дорого/тяжело переписать на джаву.
2. Писать код, который делает какие-то тяжёлые вычисления в большом количестве — видео, аудио, игры, что там ещё можно придумать. Вот были бы у тебя десятки/сотни мегабайт данных — можно было бы подумать. В гугл клавиатуре, например, в нативную часть вынесена работа со словарями (чтобы искать слова супер быстро в бинарном словаре) и нейросети. Объёмы данных там небольшие, но нужен очень быстрый, прогнозируемый (относительно) отклик.
Есть ещё области поменьше, но в моей практике встречались довольно редко — шарить код с iOS, прятать какие-то алгоритмы в нативную часть. Что-то такое.