To solve the given optimization problem, we first need to convert the natural language description into a symbolic representation. Let's denote the number of hand-bags as \(x_1\) and the number of backpacks as \(x_2\).

The symbolic representation can be described as follows:
```json
{
  'sym_variables': [('x1', 'hand-bags'), ('x2', 'backpacks')],
  'objective_function': '75*x1 + 60*x2',
  'constraints': ['6*x1 + 7*x2 <= 400', '3*x1 + 5*x2 <= 600', 'x1 >= 0', 'x2 >= 0']
}
```

This representation captures the essence of the problem:
- \(x_1\) represents the number of hand-bags, and \(x_2\) represents the number of backpacks.
- The objective function is to maximize profit: \(75x_1 + 60x_2\).
- Constraints include:
  - Sewing time constraint: \(6x_1 + 7x_2 \leq 400\)
  - Painting time constraint: \(3x_1 + 5x_2 \leq 600\)
  - Non-negativity constraints for both variables since we cannot produce a negative number of bags.

Now, let's write the Gurobi code in Python to solve this linear programming problem:
```python
from gurobipy import *

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

# Add variables
x1 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="hand-bags")
x2 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="backpacks")

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

# Add constraints
m.addConstr(6*x1 + 7*x2 <= 400, "sewing_time")
m.addConstr(3*x1 + 5*x2 <= 600, "painting_time")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of hand-bags: {x1.x}")
    print(f"Number of backpacks: {x2.x}")
    print(f"Maximum profit: ${75*x1.x + 60*x2.x:.2f}")
else:
    print("No optimal solution found")
```