We can't do that with a solidify modifier. But, yes, we can do it, non-destructively, with modifiers, at least in 2.93.6. It is not the simplest thing in the world, but once done, we can just link modifiers from one object to another to copy it elsewhere.
The first thing we're going to need is a modifier that creates faces. There aren't a lot of those; let's use the screw modifier:

On those settings, that modifier duplicates the edges, moves the duplicates up 1 unit in local Z, and bridges the loops.
Unfortunately, even though it made faces, it didn't make them where we need them to be. We'll have to move the vertices it created. Unfortunately again, we can't easily distinguish the vertices it created from the vertices that were originally there, because a screw modifier doesn't let us assign generated verts to vertex groups like a solidify modifier does (one of my favorite recent modifier improvements!) But with a little use of geometry nodes, we can distinguish:

What's different between the two sets of edges? The z position. We'll store the z position (and everything else) as an attribute with a geometry nodes modifier. We can compare our old positions to new positions to see if we're the same afterwards, and then displace the original position of our new vertices-- only our new vertices-- in the direction of their normals:

This is bigger, so let's walk through what those nodes are doing. First, we're recreating our pre-screw position ("oldpos") from our x, y, and z attributes. Next, we're checking oldpos.z against position.z to see if they're different, and marking the differences with attribute "diff". Then, we're creating a normal from the old positions (our normals have been changed by our screw modifier), knowing that the normal of faceless vertices in Blender is just the normalized vector from the object origin. Then we're multiplying that normal by whether or not the vertices are "diff" or not, and adding that to their position.
On my first iteration of this, I was working with vertex groups to store positions, but was pleasantly surprised to see that Blender stored the attributes directly. Note that this is not a solution for 3.0, which dramatically changes how geometry nodes work. A solution in 3.0 may or may not be possible.
If we'd rather not just use oldpos to determine our normals-- like, if you don't trust me that that's how Blender calculates the normals-- then we can always store the old normals as attributes, similar to how we store the old position as attributes, and use that to displace instead.
This is just like solidifying a line, with offset 1 and thickness 1. If we want an offset of -1, we could multiply our displacement vector by -1; if we want a different thickness, we would multiply our displacement vector by that thickness. Offsets between -1 and 1 are a little more complicated-- we'll also need to adjust the position of verts that have not been changed by the screw modifier-- but it is possible.