About a year before getting my first 3D printer, I found a program called Blender. It was a good thing that I had some time to learn how to 3D model before I got it because creating a model from scratch is no simple task. Just changing the shape of a cube in Blender seemed like a tremendous victory at first. After a year of practicing in my spare time, however, I was able to create some rudimentary enclosures for my projects as well as some other interesting things.
Though blender takes quite a bit of time to learn, creating an accurate real world models is not a difficult task once you understand the interface. Blender contains a toolbar used specifically to input real world values. Simply switch it to the metric system and start modeling. All the values needed can be typed in as parameters for the model. The only part that I thought was tricky was getting a model exported for printing. I've found that when working in millimeters it's necessary to change the scaling on the .stl model at export to 1000 times the normal size for an accurately sized print (in Blender 2.79). Other than that, creating a model that's to scale and ready to print is fairly simple.
An image representing the way a model could look in real life
An image of a model that was designed to be printed
I also create things in Blender that don't require attention to real world values. Sometimes I just like to visualize an idea and I have no need to physically handle it. This is where Blender really shines. It has so many amazing capabilities wrapped up inside of it that it will take years to master. I'm still learning how to fully utilize the system, in fact. You can make things look as realistic as you want, it all depends on the requirements for the model and how much time you're willing to give to the project.
A textured model built to visualize a real world representation of components
A textureless model built to visualize an idea, materials weren't needed