Like Ege said above, Workflow can do it. For fields in a table or collection, you can get the row they're in and use it to pull out the other rows to make sure you're assigning the right metadata.
I'll try to explain it below. The major change to your process would be that you would have Forms save the form to Laserfiche, but pass the saving of attachments on to Workflow.
The workflow process can be started either from a service task in Forms or from the form saved to Laserfiche as long as Forms sets the instance ID and submission ID as field values.
The screenshot below assumes the workflow is started from Forms. If starting from LF, you will need to add a Retrieve Field Values at the top to read the instance ID and submission ID from the starting entry and set them in the advanced properties of Retrieve Forms Content.
In the example below, my form has a table with 2 columns: column 1 (text) and column 2 (file upload). The workflow adds each uploaded file to Laserfiche and sets the corresponding value from column 1 as a field value.
For the purpose of this example, let's say the form looks like this when submitted:

When Workflow retrieves its data, it generates a multi-value token with the column data for each column. These tokens are named after the activity, table and column. So for my unimaginatively named table and column: %(RetrieveLaserficheFormsContent_Table\Column_1). For my sample form, this is a multi-value token that contains the 2 values: A and B.

Workflow also retrieves the attachments as a file collection that we can process with For Each File:

Each file generates tokens for its name, path, size and extension. The path refers to the file's location in the rows in the table by table and column names: TableName\ColumnName\RowNumber. So for the first 2 in my sample form, the path in my table would be Table\Column_2\1, the next 2 would be Table\Column_2\2.
We can use this path and regular expression to extract the row number from the end and assign it to a token.


This would generate a token with the value "1" for the first 2 attachments and the value "2" for the next 2.
We then create an empty document in Laserfiche, attach the current file as an electronic component and assign the field.
To assign the field value, we use the row number above to get the corresponding value out of the multi-value token for the other column.


For the first 2 attachments, this will return Column 1's value from the first row, "A", while the next 2 would get the value from row 2, "B".
Let me know if this doesn't quite make sense.