What should I do to get a <div>
containing variable text behaving as follows:
The closest I got was using display: inline-block; min-width: 400px;
but long paragraphs with short words still stretch the width.
You're saying you want your div
to behave like a table / table-cell.
This should meet all your stated requirements:
.box {
width: 400px;
display: inline-table; /* table|inline-table|table-cell */
word-wrap: normal;
}