Brown beef and onion in a skillet over medium-high heat for 7 minutes until the meat reaches 160°F. Drain excess fat.
Add ketchup, tomato paste, water, vinegar, brown sugar, Worcestershire, salt and pepper. Simmer for 8 to 10 minutes until very thick, then let cool for 5 minutes.
Butter one side of each bread slice. Set four slices butter-side down and layer each with one cheese slice, one-quarter of the filling and another cheese slice; add the remaining bread butter-side up.
Heat a large skillet over medium-low heat. Cook two sandwiches at a time for 3 to 4 minutes per side until golden and the cheese is melted, pressing gently with a spatula.
Rest for 2 minutes before cutting so the filling settles between the cheese layers.