There are a number of ways of doing this. There are databases available of 9-digit zip codes with the lat and long. A 9-digit zip code basically specifies one block. Actually one side of the street for one block. Or sometimes one floor of an apartment bldg, Etc. Pretty geographically specific.
Most CASS software can append lat and long. Mailer's +4 sells an "address" object which can CASS a record, append zip+4 and lat and long.
www.mailerssoftware.com.
There are also databases available where you can look-up the 9-digit zip code (might want to check
www.USPS.gov) But, of course, such a database is fairly useless if you don't have the 9-digit zipcode to begin with, so back to the CASS software.
If you don't need 9-digit exactness, you can probably get a 5-digit database with lat and long from the census bureau or USPS.