Preheat oven to 400 degrees F and line a large baking sheet with parchment paper.
Divide the broccoli between the stems and the florets. Roughly chop the florets and drizzle with olive oil, salt, and pepper. Set the stems aside. Transfer the broccoli to the lined baking sheet and roast for approximately 30-35 minutes, or until fully cooked.
As the broccoli cooks, add approximately 1-2 teaspoons olive oil to a large heavy-bottomed pot over medium-high heat. Add the onion and sauté for approximately 4-5 minutes, stirring occasionally. Add the garlic to the pot and cook for one minute more before adding the chopped broccoli stems, celery, carrots, chopped potato, Italian seasoning, cayenne pepper, salt, and black pepper. Mix well to combine. Cook the vegetables for approximately 6-8 minutes, stirring frequently.
Add the vegetable stock/water to the pot and bring to a boil. Cover and reduce heat to low. Simmer for approximately 10 minutes, or until vegetables are cooked and tender and broccoli has finished roasting.
Remove the broccoli from the oven and transfer to the soup pot. Stir well to combine. Remove the pot from the heat. Carefully transfer soup to a large blender, working in batches if needed. Process the soup until smooth and desired consistency is reached. Transfer back to the pot over low heat.
Stir in the milk and simmer just until heated through. Remove from heat.
Garnish with additionally roasted broccoli florets, shredded cheese, and parmesan crips, if desired.