Here is an example of constructing purely vector figure using `Region` functionality.

Input:

    data = Table[{x, BesselJ[k, x]}, {k, 0, 4}, {x, 0, 10, 0.5}];
    aspectRatio = 1/2;
    markers = {"Circle", "ThreePointedStar", "FourPointedStar", 
       "DiagonalFourPointedStar", "FivePointedStar"};
    colors = {Blue, Red, Green, Yellow, Orange};
    background = Darker@Gray;

Auxiliary functions:

    Clear[padPlotRange, rescaleCoords, rescaleCoordsBack, putMarker, \
    createLineWithMarkers]
    padPlotRange[xPadding_ : .01, 
       yPadding_ : .02][{{xMin_, xMax_}, {yMin_, yMax_}}] := 
     Module[{xd, yd},
      xd = (xMax - xMin)*xPadding;
      yd = (yMax - yMin)*yPadding;
      {{xMin - xd, xMax + xd}, {yMin - yd, yMax + yd}}
      ]
    rescaleCoords[paddedPlotRange_, aspectRatio_][pts_] := 
     Module[{xCoords = pts[[All, 1]], yCoords = pts[[All, 2]], xResc, 
       yResc},
      xResc = Rescale[#, paddedPlotRange[[1]], {0, 1}] & /@ xCoords;
      yResc = 
       Rescale[#, paddedPlotRange[[2]], {0, aspectRatio}] & /@ yCoords;
      Transpose[{xResc, yResc}]
      ]
    rescaleCoordsBack[paddedPlotRange_, aspectRatio_][pts_] := 
     Module[{xCoords = pts[[All, 1]], yCoords = pts[[All, 2]], xResc, 
       yResc},
      xResc = Rescale[#, {0, 1}, paddedPlotRange[[1]]] & /@ xCoords;
      yResc = 
       Rescale[#, {0, aspectRatio}, paddedPlotRange[[2]]] & /@ yCoords;
      Transpose[{xResc, yResc}]
      ]
    putMarker[marker_Polygon][pts_] := 
      Polygon /@ Table[# + vect & /@ marker[[1]], {vect, pts}];
    createLineWithMarkers[marker_String, pts_, size_ : .02] := 
     Module[{markerPrims, linePrims},
      markerPrims = 
       putMarker[ResourceFunction["PolygonMarker"][marker, size]][pts];
      linePrims = 
       MeshPrimitives[
        RegionDifference[Line[pts], RegionUnion @@ markerPrims], 1];
      Join[{CapForm[None]}, linePrims, markerPrims]
      ]

Plotting:

    dataRange = MinMax /@ Transpose[Flatten[data, 1]];
    paddedPlotRange = padPlotRange[.004, .0001]@dataRange;
    dataResc = rescaleCoords[paddedPlotRange, aspectRatio] /@ data;
    primitivesResc = 
      Table[{colors[[i]], FaceForm[None], 
        EdgeForm[{colors[[i]], AbsoluteThickness[1.5], 
          JoinForm[{"Miter", 6}]}], 
        createLineWithMarkers[markers[[i]], dataResc[[i]], .02]}, {i, 
        Length[dataResc]}];
    primitives = 
      primitivesResc /. (h : Line | Polygon)[pts_] :> 
        h@rescaleCoordsBack[paddedPlotRange, aspectRatio][pts];
    pl = Graphics[primitives, AspectRatio -> aspectRatio, ImageSize -> 500, 
     Frame -> True, Background -> background, FrameStyle -> White, 
     ImagePadding -> {{30, 20}, {25, 20}}, GridLines -> Automatic]

> [![output][1]][1]

Exporting to PDF and looking closer:

    Export["plot.pdf", pl] // SystemOpen

[![screenshot][2]][2]

Looks perfect.

  [1]: https://i.sstatic.net/kNrzo.png
  [2]: https://i.sstatic.net/ga7Og.png