Благодарю за участие. Придумал другой ход: может кому пригодится, выкладываю
moves - исходный массив.
function perebor(item, i, moves) {
if(typeof(item) == 'object'){
item.forEach(perebor); //если рассматриваемый элемент - массив, заново кидаем его в функцию на ращипление
}else{
if(item!==0 && i!==0){ //если элемент не нулевой и это значение не равно нулю
moves.splice(i, 1, [item, ["value0", 88, 89]]); //Заменяем элемент массивом типа [элемент, [доп. массив]]
}
}
}
moves.forEach(perebor);
alert(moves);
Всё, функция создает бездонный массив, как и требовалось. Кроме того, она параллельно строит все ветки массива, а не по очереди - это в моем случае тоже важно, но забыл сказать об этом