Returning structured, semantic HTML from the server, viewing it as an encoding of the actual information delivered (as opposed to seeing it as an implementation detail or just presentation) suggests that you deliver information in a machine-readable, accessible way.
You are completely right that you can achieve the same thing in an SPA. Depending on the framework, you might find several layers between yourself and the actual HTML (or DOM, to be precise), which may be outside of your control.
It doesn’t have to be this way. It mostly is.