I do however like it because I can create something I need everywhere with functionality attached to it.
This is precisely why singletons are bad.
If you get in the habit of "oh, hey, I'll just snag a little of this and throw it over there," you're screwing yourself in the long term. Your code will, as it increases in size, become difficult to reason about. It will be hard to maintain. And you will get weird bugs that are extremely frustrating, because there will be a tangled mess of intertwined responsibilities spread across half your code base.
There are fabulously few things you "need everywhere" in any program. Most of them do not deserve to be objects, let alone singletons; and the few that do need to be objects rarely need to be singletons anyways because engineering your code to assume there is only "one of these" makes it needlessly brittle. Someday you'll find a reason to need two, and then you're screwed.
Don't think of this so much as "doing X will lead to badness" but more of "not doing X will enable more goodness." Not using singletons will allow you to design code that is loosely coupled - things that shouldn't be related won't be. This is great because it means localization of concerns. You no longer have to look at your physics code to figure out why the high scores are showing up wrong. You no longer have to worry about things like your menus accidentally deleting themselves.
The key to good software design is minimalism. One class should have one and only one responsibility, for instance. One concept should be mapped to as few implementation details as possible. One implementation detail should affect as few high-level concepts as possible. The more simplistic and contained your code is, the easier it is to think about and reuse.
Consider two alternatives.
In the first world, you manage game states using a singleton. Every time you want to update the current game state, you ask the singleton to do it for you. Game state management is spread across most of your code.
In the second world, you manage game states in a centralized location. No implementation of any one game state says where to go next, or how to do it; instead, you contain the entire state machine to a single function in a single file.
Maybe you find the first method simpler now, but that's just because you've dug yourself a rut and need to pop out of it. The second method is probably actually easier to write.
But now you have to add a new game state, or maybe make the high score screen pop up after you die but before you go back to the main menu.
Which code is going to be easier to work on?