Your problem is not
JSF, it is the HTML that JSF generates.
HTML is unlike PostScript (PDF) format in that the layout information is only a suggestion rather than absolute, and one of the ways you can see this is in what it does with space characters on the page.
There are a couple of ways to get a horizontal line on a web page in HTML (and thus in JSF). The most basic one is the <hr/> tag. By default, however, this won't be an underline, it will be a line approximately midway up in the current row.
Another way is to use an image tag to pull in an image of a blank underline and stretch it horizontally using the image width attributes.
Or you can define a single-column table (panelGrid) of the required width and height with a bottom border and nothing in the table. This also works with a straight HTML <div> element.
If you are looking, however, to construct an input form with underlined data entry areas similar to a printed form, you can do a CSS override on the HTML input control to change the box from its default all-around border to one with only a bottom border.