Boas perguntas, vamo lá.
O cartão era programado em uma máquina parecida com essa MX6000 é basicamente uma máquina com vários módulos, e esses módulos faziam coisas diferentes, por exemplo: Um módulo escrevia no cartão (numero, nome, etc), um módulo se comunicava com o cartão para ser feita a programação, um módulo escreve na tarja magnética, etc. A equipe que eu trabalhava era responsável por fazer o script de personalização e controle, basicamente o cartão já chegava com sistema operacional instalado, mas sem nenhum dado de cliente, e o nosso script fazia os cálculos criptográficos e inseriam da maneira correta no cartão, junto com as informações únicas dele, como o número, data de validade, nome do portador, etc, após isso era rodado um script de controle, que simulava uma transação, para garantir que o cartão estava OK. A linguagem era uma linguagem de script proprietária da empresa para rodar no sistema dessas máquinas. Mas toda comunicação com o cartão é feito via APDU seguindo a ISO 7816, então na teoria pode ser feita com qualquer linguagem, desde que seja feito os comandos corretos na ordem correta.