Preheat the oven to 400 degrees F and line a rimmed baking sheet with parchment paper.
Cut the spaghetti squash in half lengthwise and scoop out the seeds. Brush the cut sides with about 1 teaspoon olive oil and season lightly with salt and pepper. Place cut-side down on the prepared baking sheet.
Roast for 35 to 40 minutes, until the squash is just tender and the strands separate easily with a fork. Avoid overcooking.
Meanwhile, heat the remaining olive oil in a large skillet over medium heat. Add the onion and cook for 4 to 5 minutes, until softened. Add the garlic and cook for 30 seconds, until fragrant.
Add the ground beef and cook until browned, breaking it apart as it cooks. Drain any excess grease.
Stir in the tomato paste, crushed tomatoes, tomato sauce, Italian seasoning, salt, pepper and honey, if using. Simmer uncovered for 20 to 25 minutes, stirring occasionally, until the sauce is thick. Stir in 2 tablespoons Parmesan cheese and 2 tablespoons fresh basil.
Remove the squash from the oven and let it cool slightly. Scrape the flesh into strands using a fork and measure approximately 6 cups.
Place the squash strands in a colander and let them drain for 10 to 15 minutes. Gently press out excess moisture or blot the strands with paper towels.
Reduce the oven temperature to 375 degrees F and lightly coat a 9×13-inch baking dish with nonstick cooking spray.
In a large bowl, toss the drained spaghetti squash with the meat sauce until evenly combined. Transfer the mixture to the prepared baking dish and spread it into an even layer. Sprinkle all of the mozzarella cheese evenly over the top.
Bake uncovered for 25 to 30 minutes, until the casserole is heated through and bubbling around the edges. If desired, broil for 2 to 3 minutes until the cheese is lightly browned.
Let the casserole rest for 10 to 15 minutes before serving. Sprinkle with the remaining fresh basil and enjoy!