Prepare the grill for direct and indirect cooking over high heat (450° to 550°F).
In a large bowl beat the egg ingredients until smooth. In another large bowl mix the leftover ingredients.
Brush the cooking grates clean. In a 10-inch cast-iron skillet set over direct high heat, melt the butter and sauté the onion until softened, 2 to 3 minutes, stirring frequently (move the pan over indirect heat if the onion begins to brown). Add the garlic and cook for 30 seconds to 1 minute more, stirring to prevent burning. Pour the egg mixture into the skillet and then scatter the leftover mixture evenly over the top. Cook over direct high heat, with the lid closed, for 2 minutes. Wearing insulated barbecue mitts, tip the skillet and loosen the edges of the eggs all around, letting the uncooked egg mixture run underneath.
Move the skillet over indirect high heat and continue cooking, with the lid closed as much as possible, until the eggs are set, 15 to 20 minutes, loosening the sides and tilting the skillet to get all the uncooked egg mixture underneath one or two more times. Jiggle the pan at each check and when the center is set, the frittata is done. Remove from the grill and let rest for about 3 minutes.
Cut the frittata into wedges and serve warm, at room temperature, or cold.