Specifically, why are the most popular attack proxies written in java? Is there any particular security posture to the design of the java language that makes writing tools like these simpler? Easier to maintain and update?
Reason for high level languages: Let's say you are writing a program that is written that executes under the attackers machine which may send an attack against a remote machine or whatever. There is no point writing in in low level language is it requires more time to manage. So, you may as well write it in high-level language which uses bytecode language such as .NET or Java etc so it's cross-platform and easy to manage and scalability.
Reason for low level languages or native code: Let's say you are writing some form of pentest code to execute under the victims machine you ideally want less dependencies so it will likely to execute under more machines. If we used high-level language such as Java then we need all victims to have Java VM installed.
If we are talking about Windows platform then other reasons for native code would be exploiting internal windows is much harder to do under bytecode languages. Bytecode only executes under ring 3 where as native languages such as assembly, C and C++ you can write drivers to execute at lower rings.
So, summary just depends on what your coding.