Using the Event Name Badge feature
As of Civi 4.4, you can configure label formats as shown here: http://book.civicrm.org/user/current/events/event-badges/

But yes, this means each field needs to be on a separate line.

In terms of having the full name for the state, Name and Mailing labels show the state/province name as the abbreviation rather than the full state/province name. This has been reported on v4.5.2, but may need patching until it is fixed in v4.8:
https://issues.civicrm.org/jira/browse/CRM-15505 

If you want to patch it yourself for now, here's what I do.
In CRM/Contact/BAO/Query.php, line 5533 (or thereabouts) is as follows: 

    $dao-&gt;$value['pseudoField'] = $dao-&gt;$key = CRM_Core_PseudoConstant::stateProvinceAbbreviation($val); 


Change this line to: 

    $dao-&gt;$value['pseudoField'] = $dao-&gt;$key = CRM_Core_PseudoConstant::stateProvince($val);