Штатные компоненты используют фильтрацию по наличию с помощью флага CATALOG_AVAILABLE который вычисляется если включен количественный учет для товара.
Соответственно не важно какие остатки возвращает 1с, нулевые или даже отрицательные у вас товары всегда на сайте будут доступны. Все ваши манипуляции помогают временно только по тому что при обмене опять вычисляется этот флаг и сбрасывается опять на "в наличи".
По этому включите его для всех товаров, и в настройках торгового каталога переиндексируйте доступность товаров.
Если опцию использовать не хотите, а отфильтровать нужно, то опцию не показывать отсутствующие товары в компоненте отключаете и везде прописываете свой фильтр перед вызовом компонентов.
Там используете другое поле для фильтрации, а именно
$arrFilter = [
'>CATALOG_QUANTITY' => 0
];