Single core performance has not been stagnant. We're about double where we were in 2015 for a range of workloads. Branch prediction, OoO execution, SIMD, etc. make a huge difference.
The clock speed of a core is important and we are hitting physical limits there, but we're also getting more done with each clock cycle than ever before.