Как и многие вопросы в программировании, правильный ответ - «это зависит».
Чтобы взять Javascript / jQuery в качестве примера, одним хорошим правилом является то, будет ли параметр требоваться при каждом вызове функции или является необязательным. Например, самой основной функции jQuery требуется выражение, чтобы определить, на какой элемент (элементы) повлияет операция:
jQuery(expresssion)
Нет смысла пытаться передать этот параметр как часть массива, так как он потребуется каждый раз, когда вызывается эта функция.
С другой стороны, многие плагины jQuery требуют нескольких дополнительных параметров, которые могут быть необязательными. По соглашению, они передаются как параметры через массив 'options'. Как вы сказали, это обеспечивает хороший интерфейс, так как новые параметры могут быть добавлены без влияния на существующий API. Это также делает API чистым, так как пользователь может игнорировать те опции, которые не применимы.
В общем, когда задействованы несколько параметров, передача их в виде массива является хорошим соглашением, поскольку многие из них, безусловно, будут необязательными. Это помогло бы очистить многие WIN32 API, хотя работать с массивами в C / C ++ труднее, чем в Javascript.