It's not hard to build a HTTP Header.
You only need a terminal and some swiss knife like netcat (It's a tool that let you do very basics things, like cat on network).
Someting like:
nc << eof www.site2.com 80
GET /somepath/somedest HTTP/1.0
Host: wwww.site2.com
Referer: wwww.site1.com
.
Could be enough.
(Nota: the dot . at end is useless, but an empty line mark the end of header)
So the answer is yes it's possible to fake a HTTP Header.
This was done on firefox 19.0
For hidding referer field, I've used an option in squid proxy server from some years ago, but I'm sure that there must exist some modules or extensions for browser who would do the trick....
...A quick look in my firefox (v19.0) config let me see that there is an option: network.http.sendRefererHeader.
This option could be set to:
0 Never send the Referer header or set document.referrer.
1 Send the Referer header when clicking on a link, and set document.referrer for the following page.
2 (Default) Send the Referer header when clicking on a link or loading an image, and set document.referrer for the following page.