WordPress doesn't "auto-detect" the width, it expects the theme to tell it what the correct width actually is. The $content_width has been around for 3 years or so now, and any theme that has been made in that time should be implementing it properly.
If your theme doesn't implement it properly, then you can add it like so:
In the theme's functions.php file:
global $content_width;
$content_width = 123;
Where "123" is the number of pixels wide that the main "content" area is for the theme.