Чем обусловлены различия в работе со строками и другими массивами?
Это наследство С.
Используйте STL - и const std::vector< int > mas = { 4, 5, 7, 9 };
скомпилируется без проблем.
Вообще, больше используйте STL и меньше - массивы и строки в С-стиле. Во всяком случае, пока не освоитесь в языке настолько, чтобы лезть глубже.
Например, вопрос о константности указателя говорит о непонимании того, что на самом деле происходит в памяти.
Различия обусловнены тем, что строки - особый вид массивов. Весьма частый и использующийся повсеместно. Плюс, в отличии от обычных массивов, в строках есть нулевой завершающий байт. Поэтому некоторые вещи стандартом Си были добавлены в язык отдельно для строк. Как, например, инициализацию const char* строковым литералом, или инициализацию массива с рассчетом его размера (учитывая нулевой символ в конце). Оно же потом перекочевало в Си++.