Heat a large skillet over medium-low heat. Place 4 slices of bread on a cutting board and generously butter the top sides of each slice. Melt another tablespoon of the butter in the skillet; swirl around to coat the pan.
Lay 2 slices of bread, buttered side down, in the skillet. Put a few slices of the cheese on the bread. Lay the tomato, and/or ham on top of the cheese. Cover with a few more slices of cheese. Top with 2 of the remaining slices of bread, placed buttered-side up.
Cook, without pressing, until the bread browns and the cheese is slightly melted, about 5 minutes. Turn the sandwiches with a spatula and add a small piece of butter to the pan. Cook slowly, adjusting the heat as needed to melt the cheese completely before the sandwiches are brown, about 3 to 4 minutes more. Repeat with the other 2 sandwiches. Serve.