Поздравляю, ты попался на лямбду.
Лямбды сохраняют ссылки на переменные, а не их значения.
lambda _: set_default_microphone(index)
сохранит ссылку на index, а потому все лямбды будут видеть одно и то же значение index, которое было установлено последним.
Это можно обойти, сохранив ссылку при объявлении лямбды. Самый простой способ - засунуть сохраняемое значение в значение по умолчанию для неиспользуемого параметра. Значения по умолчанию для параметров вычисляются один раз при объявлении функции, в т.ч. лямбды.
Например, так:
lambda _, *, ind=index: set_default_microphone(ind)
Ну или даже так:
lambda _, *, index=index: set_default_microphone(index)