<br> and <br /> tags HTML markup tags to indicate a line break. The latter is XHTML 1.0 and HTML 4.0 compliant. The <br> still exists, but is deprecated in the XHTML standards, which state that ALL tags (even tags with no closing tags like the <br> tag) need to be closed, so the addition of the slash. For example, <hr> becomes <hr />, <input> becomes <input />.
The nl2br() function takes the output from the database, and anywhere it detects a line break, inserts one into the output automatically for the HTML to parse it.
In the example you originally gave, it takes your data, and reinserts the line breaks for you. Without it, all of your line breaks go away, like you showed...
Apply the nl2br() function to your database output, and see how that works out for you.