Another reason why we need such prim: have you tried to debug a debugger? You can't , because there is a simulation guard:
<primitive: 19> "Simulation guard" "If successful, push result and return resuming context, else ^ PrimitiveFailToken" (primitiveIndex = 19) ifTrue: [Smalltalk tools debugContext: self label:'Code simulation error' contents: nil].
This is because you cannot instruct VM that the code you stepping over should not escape out of your control.