Ну так у тебя интероп с С есть везде. В питоне - просто включаешь хеадер и все. В Java JNA.
ОК. А сколько шагов-то нужно сделать, чтобы собрать модуль. Меняем джава код - перегенерируем хедеры. Меняем нативный код - в случае JNA ничего делать к счастью не надо. И да, выбрав тормозной JNA, который даёт удобство за счёт перформанса и построен поверх JNI, и ЕМНИП при запуске строит таблицу переходов и каждый вызов проходит через эту таблицу, ты немного слукавил. Ну ладно, один дополнительный шаг - генерация хедеров.
В случае Раста нам ещё надо перегенерировать Растовые обёртки над сишным кодом. В итоге - два шага.
Сравним теперь с интеропом С <-> C++. Меняем код, запускаем компиляцию, всё магическим образом работает. Не надо ничего перегенерировать.