ami_moor, Ваша ключевая ошибка в том, что результат возвращаемой функции зависит от переменных, которые хранятся в замыкании и которые Вы изменяете:
1. В возвращаемой функции Вы вызываете func с массивом аргументов masArg, который изменили до этого. Чего делать нельзя, так как при последующем вызове функции массив masArg сохранится в замыкании. Перед изменением masArg сделайте копию массива и работайте с ней. К примеру:
let args = masArg.slice()
2. Во вторых, у Вас в замыкании хранится count и в возвращаемой функции эта переменная никак не обновляется. Значит при повторном вызове она будет иметь значение на конец предыдущего вызова функции.
Для исправления Вашего кода вынесите объявление masArg2 и count в начало возвращаемой функции. И перед проверкой на undefined сделайте копию masArg и вносите аргументы уже в копию, аргументы из которой потом передадите в func.
Ну и конечно, как уже сказал
рони, результат второго вызова должен быть не 'a=1, b=
2, c=3', а 'a=1, b=
1, c=3'.