Ну по идее низкоуровневые языки выбирают там, где очень важна скорость, а более высокоуровневые - там где скорость и требования к памяти не такие большие
Обычно ориентируются на либы и фреймвёрки. Какой бы не был язык, если нет нужной либы, то жизнь становится грустной. А если тебе нужно байты перемалывать без всяких либ, то... в общем-то что Python, что Си одинаково будет. НУ может на Си даже быстрее, ибо не нужно заморачиватся как получить i-й байт из структуры. Ну и всё это деление достаточно условно, сейчас высокоуровневые языки означает скорее кроссплатформенные, которые нарочно скрывают конкретные возможности той или иной OS чтобы код был кроссплатформенный. Например, JS, вызвать что-нить из API Linux ядра там может быть не очень удачная идея. Ну и есть языки, которые это предоставляют.
Вот С++ вроде нзкоуровневый, а вроде бы и высокоуровневый... Rust?