The two operating systems were trying to solve different problems, and had different system requirements because of that. Windows 3.1 was fine for running multiple interactive applications since neither application would be doing real work in the background. When Windows 95 entered the picture, that changed and its system requirements weren't all that different from OS/2.
And that is just one example. Windows 3.1 didn't provide much in the way of memory protection. (From my recollections, it could detect a memory access violation. At that point it would blue screen.) One of OS/2's most noteworthy features was memory protection. All of a sudden you could use your computer for an entire day without losing work from crashing. Yeah, OS/2 would happily terminate an application (rather than the OS) when there was a memory access violation. On the other hand, it made it much easier for developers to detect and address such bugs.
On that last point: I have fond memories of bringing OS/2 boot disks to my high school programming classes after the upgrade to Windows 95 (and, when they started refusing to let me boot OS/2, they let me use the NT server). There was a world of difference between programming under OS/2 or NT verses Windows 95. No one bothered to try programming under Windows 3.1!