1) Из опыта использования eToken CSP + JavaApplet.
Использование SunMSCAPI в апплетах возможно, но после перегрузки страницы создается новый апплет, который ничего "не помнит" о введенном ранее пароле на ключ и т.д.
Таким образом, при каждой подписи документа снова запрашивается пароль на ключ. Для провайдеров MS это не критично (пароли отсутствуют), но для сторонних — неудобно.
Есть также некая трабла с перечислением псевдонимов сертификатов в хранилище. CAPI позволяет хранить в сертификаты с одинаковыми CommonName, а у Java напрочь отсутствует возможность доступиться к таковым через итератор (только к 1-му из них).
2) для CAPICOM все байтовые массивы сначала конвертятся в BSTR, чтобы передаваться на вход.
При этом нечетное количество байтов, по идее, не может быть конвертировано без выравнивания до четного. Это насчет совместимости.
3) можно написать свой CAPICOM

и сопровождать его назло Мелкософту.