CFD is a prime example for "garbage in – garbage out".
There is a large range of parameters that needs to be set correctly, from fluid properties to surface roughness. If the persons feeding the software do not understand what they are doing, it is very hard for them to judge the result. Lots can go wrong and will produce colorful but wrong results.
CFD is best suited when you know what to expect and can check the correctness with real-world data. Then it is fair to assume that the results over the whole flowfield are realistic and looking into corners that cannot be observed in an experiment makes CFD supremely useful.
Why else are wind tunnels still solidly booked and running? Today, it is mostly for validating CFD results and making sure the complex software produced realistic results.
Now I have answered your question body. Since you asked something rather different in the title: That answer follows here:
Accuracy depends on:
- The code: Potential code cannot model separation, Euler codes cannot model viscosity. Navier-Stokes codes can, but still have trouble with turbulent, separated flows. For more detail, make sure to read the answer of @XRF.
- The mesh geometry: It is hard to get the mesh right so solutions iterate well and results are robust.
- Mesh resolution: A coarse grid (2D) or mesh (3D) will create poorer results than a fine mesh. Of course, computational load goes up with mesh size.
- The domain being investigated: Subsonic, fully attached and steady state flow is easier to get right than separated flow or the exact shock position in transsonic, instationary flow.