Благодарю за участие. Придумал другой ход: может кому пригодится, выкладываю
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); 
Всё, функция создает бездонный массив, как и требовалось. Кроме того, она параллельно строит все ветки массива, а не по очереди - это в моем случае тоже важно, но забыл сказать об этом