I've written a game (ish) for Android using OpenGL, but it turned out to be such spaghetti that I abandoned the project before I was even close to a releasable product
Next time, instead of abandoning the project completely when it becomes spaghetti, try refactoring it bit by bit - making it less like spaghetti. Take one part of your architecture that you think is messy, and make it cleaner: more re-usable, less code, less coupling, etc.. Then repeat. There are some books on refactoring that might be of help. Also looking at how other open source game engines are built is of help (like someone else mentioned). I think you'd learn a lot more that way.