В конструкции extern "C" "C" — это не язык Cи, а способ передачи аргументов и адреса возврата.
Один и тот же язык может выдавать разный код вызова функций.
Возможность связывания определяется не языком, а тем как определена вызываемая функция и настойками компилятора.
Без специальных указаний компиляторы Cи далеко не всегда выдают для функций код, соответствующий стандарту передачи аргументов, необходимого для extern "C".