Put the potatoes in a large saucepan and add enough cold water to cover by 2 inches. Bring to a boil, cover and reduce the heat to maintain a steady simmer. Cook until a knife just pierces through the potatoes, about 7 minutes. Add the cauliflower, bring to a boil and simmer until a knife easily slides through the vegetables, about 20 minutes. Reserve 1 cup of the cooking water before draining.
Return the potatoes and cauliflower to the saucepan. Add the scallions and mash with a potato masher. Add 1/ 4 cup of the broth and continue mashing until almost smooth. If the mixture is dry and falling apart, add a few spoonfuls of the cooking water and continue mashing. The mixture should be thick and hold together. Season with salt and pepper.
Meanwhile, preheat the oven to 200°C. Heat a large pan over medium-high heat until hot. Add the beef and spread out in a single layer. Sprinkle with salt and pepper. Cook, stirring and breaking into small bits, until browned, about 3 minutes. Transfer to a dish with a slotted spoon.
Add the oil to the same pan and reduce the heat to medium. Add the carrots, garlic, celery, onions and some salt and pepper. Cook, stirring occasionally, until the vegetables are browned and tender, about 10 minutes. Add the flour and tomato paste and cook, stirring, for 1 minute. Stir in the Worcestershire sauce and remaining 1 cup broth. Bring to a boil, and then stir in the peas and the beef and its accumulated juices. Remove from the heat.
In a 3-quart glass or ceramic baking dish, spread the beef mixture in an even layer. Spoon the potato mixture evenly on top. Bake until the beef mixture is bubbling, about 20 minutes. Turn the oven to grill and grill until the top is golden brown, about 5 minutes more. Let rest 5 minutes before serving.