A workaround for these cases I tend to use, similar to Bill F & Naveen (but maybe a little more cleaned up):
enclose your picker target field in a div, and hide it by applying "display:none" as style. This way, it is rendered on the page which makes it accessible, but not visible.
For displaying any changes made by the picker to this field, I add an onchange event refreshing a panel which includes a computed field. Additionally, you can style the display of the names in the computed field as you like (two examples in the code).
<xp:div style="display:none;">
<xp:inputText id="yourfield" value="#{yourdocument.yourfield}" multipleSeparator=";">
<xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="surroundingpanel"></xp:eventHandler>
</xp:inputText>
</xp:div>
<xp:panel id="surroundingpanel">
<!-- displaying names abbreviated, separated by default multi-separator , -->
<xp:text escape="true" id="computedFieldExample1" value="#{yourdocument.yourfield}">
<xp:this.converter> <!-- converter is optional -->
<xp:customConverter>
<xp:this.getAsString><![CDATA[#{javascript:@Name("[ABBREVIATE]", value)}]]></xp:this.getAsString>
<xp:this.getAsObject><![CDATA[#{javascript:@Name("[CANONICALIZE]", value)}]]></xp:this.getAsObject>
</xp:customConverter>
</xp:this.converter>
</xp:text>
<!-- displaying names abbreviated one below each other -->
<xp:text escape="false" id="computedFieldExample2">
<xp:this.value><![CDATA[#{javascript:@Implode(@Name("[ABBREVIATE]", yourdocument.getItemValue("yourfield")), "<br />")}]]></xp:this.value>
</xp:text>
<xe:namePicker id="namepicker1" for="yourfield">
<xe:this.dataProvider>
<xe:dominoNABNamePicker nameList="peopleByLastName"></xe:dominoNABNamePicker>
</xe:this.dataProvider>
</xe:namePicker>
</xp:panel>