It assures that there will never, ever be more than once instance of that class. If I, or anyone, were to pick up your code, you could never guarantee that we wouldn't create another instance, which might break the application. Granted, the possibility is rather remote, but on big projects with lots of people, one may never know. Besides, it's always good to learn new things!
On another note, I believe there are some weird, obscure bugs you might get while trying if you're ever using the Tileset type in arguments and stuff - related to copy-constructors and default constructors and the like. The fact that all your constructors are private will generate a compile-time error which might save you a lot of headaches.
And finally, and this is a bit personal, but everything should have its place - "but the global namespace ain't it". I mean, where does it stop? You can shove a LOT of variables into the global namespace... that doesn't mean you should, it's that's a principle of OOP.
Ultimately it's up to you, of course, but if Kaduria is going to be as big and complex as you say, maybe this kind of stuff will save you some time in the end - in one way or another.