Heat 1 tbsp oil in a frying pan over a medium heat and fry the onion and mushrooms with a pinch of salt for 10 mins until soft. Put in a bowl and leave to cool. Add the mince, egg, parmesan, garlic and breadcrumbs, season and mix well with your hands. Roll into 25 small meatballs. Heat another 1 tbsp oil in the pan and fry the meatballs for 5 mins until browned (you’ll need to do this in batches). Put on a plate and set aside.
To make the tomato sauce, heat the remaining oil in the pan and fry the garlic, courgettes, carrots and celery for 10-15 mins until softened, adding a splash of water if needed to prevent it sticking. Stir in the thyme, passata, stock and vinegar and simmer for 20 mins until thickened. Blitz with a hand blender if you prefer a smooth sauce. Season well.
To make the white sauce, heat the butter in a medium saucepan over a medium heat. Sprinkle in the flour and stir to make a paste. Slowly add the milk, stirring, then the bay leaves (if using) and cook for a few minutes until thick. Season, add the cauliflower and simmer for 1 min.
Heat the oven to 200C/180C fan/gas 6. Stir the meatballs into the tomato sauce and spoon half into a lasagne dish. Top with half of the pasta sheets, then spoon over half of the white sauce and some mozzarella. Repeat with the remaining meatballs and sauces, then scatter over the rest of the mozzarella and the extra parmesan. Bake for 1 hr until golden.