You can "draw" to an sf::Image with the setPixel function, then upload it to VRAM with sf::Texture::loadFromImage() and finally draw it with a sprite or a vertex quad.
Or you can maintain your own pixel array and call sf::Texture::update() every frame.
SFML uses OpenGL and is thus by definition GPU accelerated, thus you'll always need to deal with a texture and a quad at some point.
Personally I don't see a reason to stick with "old fashion code" for modern system just because the game will be and "old flavor" arcade game. In my opinion you either go all in and built a game the old fashion way for old systems (either through emulation or on real hardware) or you target new hardware and adapt the code to work in sync with the new system.
Code didn't just change because the "old fashion" got old or outdated, but it constantly changes because the systems underneath start working differently. In the past you didn't work with GPUs and everything was done on the CPU, so you wrote software renderer that placed pixels and did crazy calculations, but nowadays you get all of that for "free" in your GPU.
If you really want to write a software renderer, you shouldn't use SFML which only knows how to render with your GPU.