Well, process and thread scheduling can make a very noticeable difference. Years ago, a few guys decided to revamp the Linux kernel's "good enough" thread scheduler into an actually nice one. The first iteration could handle creating and destroy 100,000 threads in 3 seconds on a box that used to take hours. Lately there have been benchmarks relating to interactivity of desktop programs, timing how long it takes for a program to respond to input. This varies dramatically depending on what priorities the kernel gives to various processes (when under load).
Implementation details can make a difference in how nice a system is to use.