Основная проблема динамически-типизированных языков - это проблемы с рефакторингом реальных кодовых баз на них.
Это выходит очень уж дорогим удовольствием, по сравнению со статически типизированными языками, причем даже по сравнению с далеко не самыми лучшими их представителями.
Да, но тут, к счастью, за многие десятилетия software engineering уже накоплен определенный опыт. Речь, в первую очередь, о языково-ориентированных подходах. Это когда компоненты системы разрабатываются на различных взаимодействующих DSL. Корни подхода можно проследить у Дугласа Энгельбарта в проекте системы NLS, сравнительно недавнюю академическую реализацию — в проекте STEPS Алана Кэя. Переспективы, на мой взгляд, имеет и вариант из Racket, когда на общей примитивно-динамической основе строятся различные eDSL, в том числе и с предметно-ориентированными типами.