Safe automatic refactoring requires the ability to do static analysis of the code. Many refactorings are harder in loosely-typed languages.
What are the features of Smalltalk that allowed this to happen? Conversely, what is stopping this from existing in more modern dynamic languages?