Realmente parece que o Swig evoluiu bastante, suportando muito bem a linguagem java. Talvez o ponto que eu queira colocar que nao ficou claro eh relacao a afinidade da linguagem com C/C++. Java possui pouca ou nenhuma afinidade com extensoes em C/C++. Ele soh define que para chamadas de coisas em C/C++ a chamada tem que ser por intermedio de funcao estatica. Alem disso nao existe um mapeamento direto entre ponteiros nas duas linguagens , visto que java nao tem ponteiros.
Ja o python (python original) eh uma linguagem muito mais proxima de C/C++. Ela permite que haja um mapeamento praticamente direto entre classes em C++ para classes em Python, Eh possivel, talvez, ate termos uma classe python que extende uma classe C++. Nao que isso seja algo positivo, mas isso eh feito com muito menos custo no python que no java.
Eh questao de concepcao da linguagem mesmo. Nao tem o que fazer. O python realmente foi feito para permitir que um grande numero de extensoes fosse realmente feito em C/C++. Ja o java possui grande parte do seu core escrito em java mesmo, como o java.lang, java.util. No python, muita coisa ta em C/C++. As vezes existem ate as duas opcoes, por exemplo, a biblioteca pickle (suporte a serializacao) tem uma versao chamaca cPickle, que implementa a mesma interface em C, com maior performance.
Meu objetivo aqui nao eh gerar um flame, eh simplesmente apresentar a diferenca entre as linguagens. Python eh uma linguagem com maior afinidade com C/C++. A primeira e a mais proxima que pude imaginar. POderia ter citado pascal, onde voce poderia definir na interface um metodo native, vindo de uma dll, ou o vb, que com a diretiva declare voce pode dizer que a funcao se encontra implementado numa dll.