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->$value['pseudoField'] = $dao->$key = CRM_Core_PseudoConstant::stateProvinceAbbreviation($val);
Change this line to:
$dao->$value['pseudoField'] = $dao->$key = CRM_Core_PseudoConstant::stateProvince($val);