The issue on Smalltalk 80 was that diffing and combining images was a huge pain. There wasn't a clear seperation between the system itself and whatever you were working on. On top of that, Smalltalk VMs generally assumed that they were the only Smalltalk VM running on a given system so it's not like you could run the different apps like different containers or processes, or whatever. Additionally Smalltalk pretty heavily encouraged making modifications to the system classes as part of the porting process.
So, not the OP, but my answers to your questions:
>What do you mean "classes strewn around everywhere" ?
It was rarely clear where your classes ended, and the system ones began, which got in the way of distribution, particularly if you wanted to run on different hardware. It was surmountable, but a pain in the ass compared to Unix (which is not really the world's highest bar, particularly at the time).
> Do you mean you never know what non-smalltalk code would be running on the same machine as the smalltalk code ?
> Why would that be a problem ?
It's what's versus running in the same VM image, including modifications to the system classes themselves. There's no good boundary between apps other than they don't have references to eachother.
>Why would that be more of a problem with a Smalltalk image than with .pyo ?
Because a .pyo only has the classes that pertain to what it's trying to do, and doesn't stop you from running other python instances at the same time. Imagine if there was only one python vm allowed to run at once, the source was an afterthought (and considered not idiomatic), and pyos were basically just memory dumps each with their own unique monkey patching of system classes.
There's a good chance that squeak/pharo have done work to address this, but that was the state of the world for Smalltalk 80. It was designed right at the cusp of collaboration on design of personal computer apps, and it shows in the overall design.