This is a still-unresolved issue in QGIS. There are lots of symbology options, and some of them will not be reflected in the legend. If you visit the issue tracker page, you will find multiple open bug reports and feature requests about this type of issue.
Here are a couple of workarounds:
If the arrow width appears correctly anywhere in the program (eg in the Layer Styling panel or the Layers panel), take a screenshot and add it to your print layout as an image.
Otherwise you have to manually re-create the arrows in the print layout.
- Use the "add arrow" button to add an arrow in the print layout.
- Style the arrow to match the size and color of one category in your virtual layer.
- Place the arrow on top of the legend so it covers up the existing symbol. Repeat for every category.
- You may need to increase the spacing between rows in the legend.
- Once you have the arrows arranged on top of the legend, select them and the legend and group them together. That allows you to move the whole group as if it was one item, and prevents you from accidentally messing it up.