Вопрос хороший, а ответ очень простой
Подготовленные выражения - это ведь подукция двойного назначения.
Они не только защищают от инъекций, но так же позволяют сэкономить несколько миллисекунд, если один и тот же запрос надо выполнить несколько раз с разными данными.
То есть по сути никакой PDO::PARAM_CLOSURE для того чтобы изменить данные на лету не нужен - ты тупо меняешь значение приязанной переменной. Именно благодаря передаче по ссылке.
$stmt = $pdo->prepare("SELECT ?");
$stmt->bindParam(1, $var);
$var = 1;
$var = 2; // меняем на лету
$stmt->execute();
$var = 3;
$stmt->execute();
Плюс, как правильно отмечают товарищи в комментах, иногда переменная служит для возвращения значения из хранимой процедуры. То есть после выполнения запроса в привязанной по ссылке переменной будет не исходное значение, а то, которое возвратила процедура