Bring a large pot of lightly salted water to a boil. Add Brussels sprouts and cook until slightly tender, about 2 minutes. Drain and immediately immerse in ice water for several minutes to stop the cooking process. Drain.
Heat olive oil in a skillet over medium heat; cook and stir onion and garlic in the hot oil until onion is just tender, 5 to 10 minutes. Add Brussels sprouts; cook and stir until sprouts are tender, 8 to 10 minutes.
Mix balsamic vinegar, butter, salt, black pepper, and garlic powder into Brussels sprouts mixture; toss to coat.