Place the potatoes in a large pot of salted water and bring them to a boil. Cook for 15 to 20 minutes, or until they are fork-tender.
While the potatoes cook, combine the ground beef, breadcrumbs, egg, grated onion, garlic, Worcestershire sauce, Dijon mustard, salt, and black pepper in a large bowl. Mix gently until everything is just combined, being careful not to overwork the mixture.
Shape the mixture into meatballs about 1½ inches in diameter and place them on a plate or baking sheet.
Heat a large skillet over medium heat. Add a small amount of oil if needed and brown the meatballs on all sides. Work in batches to avoid overcrowding the pan. Once browned, transfer the meatballs to a plate.
In the same skillet, melt the butter and cook the sliced onion until soft and lightly caramelized. Sprinkle in the flour and stir continuously for one minute. Slowly whisk in the beef broth until smooth, then stir in the Worcestershire sauce and dried thyme. Season with salt and pepper to taste.
Return the Salisbury Steak Meatballs to the skillet. Spoon the gravy over the meatballs, reduce the heat, and simmer for 10 to 15 minutes until the meatballs are fully cooked and the gravy has thickened.
Drain the potatoes and return them to the warm pot. Add the butter, warm milk, garlic, parsley, thyme, and salt. Mash until smooth and creamy.
Serve the mashed potatoes on each plate, top with the meatballs, and generously spoon the rich onion gravy over everything. Garnish with chopped parsley if desired.