Make the pav bhaji masala: In a small bowl, whisk together the garam masala, chili powder, amchoor powder, turmeric, coriander, cumin, cinnamon and cardamom until well combined.
Make the pav bhaji: Bring a large pot of salted water to a boil. Add the potatoes (left whole) and boil until a skewer meets only slight resistance, 20 to 25 minutes. Add the cauliflower and cook until almost tender, about 10 minutes, then add the frozen peas and cook until tender, about 2 minutes. Reserve 2 cups of the cooking liquid, then drain the vegetables. Let sit until the potatoes are cool enough to handle, then use your hands to slip the peels off the potatoes (and discard or compost the peels).
While the vegetables are boiling, in a Dutch oven or other large pot over medium heat, heat the oil until shimmering. Add the onion and saute until translucent, 4 to 5 minutes. Add the tomatoes, and cook until jammy, 7 to 8 minutes. Turn off the heat and let the tomato mixture sit while you finish boiling the vegetables and peeling the potatoes.
Add the potatoes, cauliflower and peas to the tomato mixture and gently mash them into the gravy, leaving some small pieces so the mash has some texture. Add the pav bhaji masala, salt and 1 cup of the cooking water, and stir to combine. Bring the mixture to a simmer and cook until it thickens and the flavors meld, about 10 minutes. Turn off the heat, cover and let sit for 5 to 10 minutes. Stir in up to 1 cup more of the cooking water if needed; you want the texture to be like sloppy Joes — scoopable but not stiff. Add the butter and stir until it melts.
Transfer the mixture to a serving bowl and serve hot, with the rolls or buns, lemons for squeezing over and lots of sliced onions for topping.