At least Broadcom's NFC controller (used e.g. in the Nexus 5) supports setting arbitrary values for the anticollision identifier (UID), the ATQA and the SAK byte. However, there is no API to change them, so the only way would be to modify the libnfc-nci library.
The relevant code for NFC-A is in the file nfa_dm_discover.c (starting on line 322):
UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_BIT_FRAME_SDD);
UINT8_TO_STREAM (p, 0x04);
UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_PLATFORM_CONFIG);
UINT8_TO_STREAM (p, platform);
UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_SEL_INFO);
UINT8_TO_STREAM (p, sens_info);
This code currently sets the ATQA (combination of the value platform and 0x04) and the SAK byte (value of sens_info).
In order to change the UID used during NFC-A anticollision, you could add the addition parameter NFC_PMID_LA_NFCID1:
UINT8_TO_STREAM (p, NFC_PMID_LA_NFCID1);
UINT8_TO_STREAM (p, 4); // length of NFCID1 in bytes
UINT8_TO_STREAM (p, 0x12);
UINT8_TO_STREAM (p, 0x34);
UINT8_TO_STREAM (p, 0x56);
UINT8_TO_STREAM (p, 0x78);
You can find a more customizable version of libnfc-nci here (still work-in-progress though).