Hay varias cosas para comentar:
El hecho de que, por ejemplo, PHP sea un lenguaje dinámico no significa que uno no tenga que validar los colaboradores que recibe al momento de crear un objeto. Como nota al margen, si estamos hablando de plata un número no alcanza: se trata de una cantidad más la moneda en la que está expresada.
Por lo tanto, podría validar que el objeto que recibo como "cantidad" cumpla las condiciones que tiene que cumplir, creando solo instancias validas de "plata". Eso además de tener cobertua vía TDD (y no solo test de unidad).
O sea, un lenguaje estáticamente tipado te da garantías sobre la jerarquía de clases a la que pertenece un objeto, pero no te puede decir si su invariante se mantiene o no (eso nos toca a nosotros!).
Si hablamos de negocios, sistemas que manejan plata y sobre todo empresas que no son start-ups qué mejor ejemplo que JP Morgan, que tiene una larga relación implementando sus sistemas con Smalltalk.
No se olviden también que en un lenguaje estáticamente tipado como Java hay que compilar, y compilar puede significar tener que bajar mi sistema, hacer deploy de una nueva versión y volver a levantarlo (aún si se del fix mas pavo). Esto para un monstruo como JP Morgan no es aceptable, ya que bajar el sistema significa pérdida de plata (y probablemente mucha). El sistema se tiene que actualizar/fixear mientras está corriendo.
Acá se ve que con un lenguaje de programación estático no alcanza. Que sea dinámico tampoco alcanza, se necesita un sistema de programación como lo es Smalltalk.
Por último, el hecho de que Java sea una tecnología que domine el mercado creo que tiene que ver más con una cuestión comercial/de marketing (y esto trae acarreado disponibilidad masiva de recursos, etc), que por otra cosa.
Está claro que siempre pueden aparecer pros y contras desde los dos lados, pero al momento de sentarse a programar hay que elegir uno (el lado oscuro???).
Salutes!
Nico