And looking inside the SimulationContext class, it provides a more granular way to control rendering and physics independently or together, while with the SimulationApp (from what I know), it is not possible or at least not in a straightforward or direct way with this class methods.
On the other hand, the class World inherits from class SimulationContext.
And according to its implementation, it calls its parent method (SimulationContext.step) but add some additional code to update bounding box cache and for data logging, among others