To solve the optimization problem described, we first need to translate the natural language description into a symbolic representation. This involves defining variables, an objective function, and constraints based on the given information.

Let's denote:
- \(x_1\) as the number of meat lunches made,
- \(x_2\) as the number of veggie lunches made.

The objective is to maximize profit. Given that the profit per meat lunch is $8 and the profit per veggie lunch is $6, the objective function can be represented algebraically as:
\[ \text{Maximize: } 8x_1 + 6x_2 \]

Now, let's consider the constraints:
1. The diner has 500 minutes available for preparations. Since the meat option takes 5 minutes to prepare and the veggie option takes 4 minutes to prepare, we have:
\[ 5x_1 + 4x_2 \leq 500 \]
2. The diner has 400 minutes available for packaging. Given that the meat option takes 3 minutes to package and the veggie option takes 5 minutes to package, we get:
\[ 3x_1 + 5x_2 \leq 400 \]
3. Non-negativity constraints since the number of lunches cannot be negative:
\[ x_1 \geq 0, x_2 \geq 0 \]

Thus, our symbolic representation in JSON format is:

```json
{
    'sym_variables': [('x1', 'number of meat lunches'), ('x2', 'number of veggie lunches')], 
    'objective_function': '8*x1 + 6*x2', 
    'constraints': ['5*x1 + 4*x2 <= 500', '3*x1 + 5*x2 <= 400', 'x1 >= 0', 'x2 >= 0']
}
```

To solve this linear programming problem, we can use Gurobi in Python. The code to implement and solve this problem is as follows:

```python
from gurobipy import *

# Create a new model
model = Model("Diner_Problem")

# Define variables
x1 = model.addVar(name="meat_lunches", vtype=GRB.CONTINUOUS, lb=0)
x2 = model.addVar(name="veggie_lunches", vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function
model.setObjective(8*x1 + 6*x2, GRB.MAXIMIZE)

# Add constraints
model.addConstr(5*x1 + 4*x2 <= 500, name="preparation_time")
model.addConstr(3*x1 + 5*x2 <= 400, name="packaging_time")

# Optimize the model
model.optimize()

# Print solution
if model.status == GRB.OPTIMAL:
    print(f"Optimal solution: {x1.varName} = {x1.x}, {x2.varName} = {x2.x}")
    print(f"Maximum profit: {model.objVal}")
else:
    print("No optimal solution found")
```