To tackle this problem, we first need to convert the natural language description into a symbolic representation. Let's denote the number of acres for beans as \(x_1\) and the number of acres for pumpkins as \(x_2\).

The symbolic representation is as follows:
```json
{
  'sym_variables': [('x1', 'acres of beans'), ('x2', 'acres of pumpkins')],
  'objective_function': '100*x1 + 110*x2',
  'constraints': [
    'x1 >= 5', 
    'x2 >= 10', 
    'x1 + x2 <= 100', 
    'x2 <= 3*x1'
  ]
}
```

Now, let's reason through the constraints:
- \(x_1 \geq 5\) ensures that at least 5 acres of beans are planted.
- \(x_2 \geq 10\) ensures that at least 10 acres of pumpkins are planted.
- \(x_1 + x_2 \leq 100\) ensures that the total planted area does not exceed 100 acres.
- \(x_2 \leq 3*x_1\) reflects the labor constraint, limiting the number of pumpkin acres to at most three times the number of bean acres.

Given this setup, we aim to maximize the profit function \(100*x_1 + 110*x_2\), which represents the total profit from planting beans and pumpkins.

Here is the Gurobi code in Python that solves the problem:
```python
from gurobipy import *

# Create a new model
m = Model("Eli_Farm")

# Define variables
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="acres_of_beans")
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="acres_of_pumpkins")

# Set the objective function
m.setObjective(100*x1 + 110*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x1 >= 5, "min_beans")
m.addConstr(x2 >= 10, "min_pumpkins")
m.addConstr(x1 + x2 <= 100, "total_acres")
m.addConstr(x2 <= 3*x1, "labor_constraint")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Acres of beans: {x1.x}")
    print(f"Acres of pumpkins: {x2.x}")
    print(f"Total profit: {m.objVal}")
else:
    print("No optimal solution found")
```