I'll write a proper answer since i was at your stage about 2 months ago.
I begun writing a very simple game engine so that I can learn OpenGL
3.x better but since my inexperience and my sparse knowledge of how a 3D game should be designed, I usually get into problems where I
realize that I should have designed my classes differently.
Don't worry about it. With your lack of experience, you'll never be able to think about all of the possibilities and ways a given class will be used in your engine. It's best if you consider the main features of the class, implement it and restructurize later. Don't try to overthink things, you'll be wasting your time at this stage. My first game was a complete mess, i'm sure it was the case for most people.
Other problems I'm facing is how to keep track of time in a concise
manner in the game and update movement as needed and how to tell the
renderer that it needs to redraw.
What you need is the knowledge on what a game loop is. This is a good place to start. Once you start writing more complex code like handling physics then you might want to consider loops with variable frame times, but start small. A simple fixed frame game loop should suffice you for now.
Also I keep needing to make Get and Set functions for passing various
flags from one object to another, is that a bad practice?
This is more of a software engineering question. With time you'll see which data you need to protect and which is safe. It's probably best if you just implement a feature and then see what's not exposed outside of it and can be treated as public data.
It's all a matter of experience. You'll write a camera class, then you'll see what functionality you want from it beside the transform matrices. If you want any immediate tips, i'd have to say, implement bare bones, extend later.
Articles and Books:
These books talk about the architecture of modern game engines and pipelines. They'll give you a good overview on the underlying technology. I recommend the first book if you have to choose, it's less "biased" towards certain technologies, though in the end you proably want to get through both since they're great sources of knowledge.
http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135
http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806
http://ogldev.atspace.co.uk/index.html
http://www.arcsynthesis.org/gltut/index.html
http://www.opengl.org/sdk/docs/man3/
http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/
http://www.opengl.org/sdk/docs/manglsl/
http://www.peroxide.dk/papers/collision/collision.pdf
(I'm linking this because i found it hard to find articles on how proper 3D collision detection is done.)
There's more books, but by the time you're done with this (especially Game Engine Architecture), you'll know better what you want.
Btw, I'm still using freeglut, would you recommend I move to a better
windowing system before progressing or after I get a better grasp of
OpenGL?
WinAPI, if you feel that you have time and will to learn Windows programming (if you're developing for Windows). FreeGLUT is fine for learning, but eventualy you'll want more functionality. Though, if you want to go the completely other route you can launch OpenGL with libraries like SFML or SDL. Stick with FreeGLUT, unless you're stubborn like me. I went straight for WinAPI.