Heat olive oil in a large skillet over medium heat. Add onion and cook until soft, about 5 minutes. Add ground beef and cook, breaking it up, until no longer pink, 6 to 8 minutes. Drain fat.
Return beef mixture to the skillet over medium heat. Stir in ketchup, garlic, brown sugar, mustard, and chili powder; season with salt and pepper. Simmer until thick, about 5 minutes. Transfer to a plate and wipe the skillet clean.
Butter one side of each bread slice. Place one slice butter-side down in the skillet, spoon on sloppy joe mixture, top with cheddar and another slice of bread butter-side up.
Cook over medium heat until the bread is golden and the cheese is melted, about 3 minutes per side. Repeat to make 4 sandwiches.