Lambert discovered in 1760 "Lambert's cosine law", which says that the intensity of the diffusely reflecting light is proportional to the cosine of the angle between the direction of the incident light and the surface normal.
This, however, is inaccurate for several real-world objects with rough surfaces (for complicated reasons: masking, shadowing and interreflections). For example if the moon reflected the light in a Lambertian way, the moon's surface would be darker around the edges. Oren and Nayar created in 1993 the "Oren–Nayar reflectance model", which takes roughness into acount. The math is pretty complicated (you can check out the details at wikipedia...), but the important part is that there is a "roughness" parameter in the 0 - 1 range (which can be adjusted in the Blender node), and when the roughness is zero, then the Oren–Nayar reflectance becomes mathematically equivalent to the Lambertian reflectance.
It is completely normal that a diffuse sphere with roughness = 1 appears "shadeless" if it is illuminated with a light that is behind the camera - this is exactly what the moon looks like.
EDIT: The roughness of the "Diffuse BSDF" node is not the same as the roughness of the "Glossy BSDF" node, they should not have the same same value. (Physically bigger surface bumps/irregularities are needed for the diffuse roughness phenomenon than for the glossy roughness - while these bigger bumps are still smaller than the pixel size). Ideally you should have two different values/maps, but in practice most people either ignore the diffuse roughness, or use a multiplication factor. As this blog says:
Diffuse roughness is now calculated as glossy roughness * 0.33 instead of using the glossy roughness directly. After actually reading some docs on Oren-Nayer shaders (how useful) I found that most real-world surfaces will not exhibit sigma values beyond 0.5, with most topping out around 0.3. This is something I probably should’ve remembered from my LuxBlend days… Anyway, I thought for awhile on the best way to handle diffuse roughness in Simple PBR. Using glossy roughness directly led to weird velvety-looks with roughness=1. I thought about disconnecting it, or locking it at a value, or exposing it as its own parameter. After awhile, I decided on using the glossy roughness * 0.33. It’s kind of arbitrary, but it gives a decent result in most cases without having to manually set it.
For an in-depth explanation see this video (especially minutes 35-37): SIGGRAPH University - Introduction to "Physically Based Shading in Theory and Practice"