Cannot see, buy, or download apps I have a Samsung Galaxy S3.

Sometimes when I'm looking for an app, it says "not available in your country". It's very weird that I cannot see or buy paid apps, when others can see them.

Is it because of my phone, my country, my Google account, or what is it? Can I change that? If yes, how?
The reason the OP cannot see an app due to a message not available in your country is down to the very simple check on the SIM card. Each SIM card has a carrier identification, and country code identification. When Android powers up, the Radio Interface Layer (RIL) obtains the carrier and network information in which the baseband receives over the air, here is a small subset of an example taken from Gingerbread source, apns-conf.xml 

&lt;apn carrier="Vodafone ES-Internet" mcc="214" mnc="01" apn="ac.vodafone.es" user="vodafone" password="vodafone" type="default,supl" /&gt;
&lt;apn carrier="Vodafone" mcc="214" mnc="01" apn="airtelwap.es" user="wap@wap" password="wap125" type="default,supl" /&gt;
&lt;apn carrier="Vodafone ES" mcc="214" mnc="01" apn="airtelwap.es" user="wap@wap" password="wap125" type="supl" /&gt;
&lt;apn carrier="Yoigo" mcc="214" mnc="04" apn="internet" proxy="010.008.000.036" port="8080" type="default,supl" /&gt;


Notice the values for mcc, mnc, for Spain for example, in this case, 214, and 01, 04 etc, that carrier information is transmitted across to the SIM card and internally within Android for reference. 

The Play Store, reads the phone state, and deduces the carrier information as a measure for "filtering" out apps based on the region/carrier. However, if the SIM card is from the country of origin, for example, UK (this also applies when roaming), Android "remembers" the mcc and mnc and pushes that aside, and gets replaced with the preferential carrier's network codes for the said values of mcc and mnc respectively when roaming, for example, Spain. (Incidentally, as a side note, that is how auto-update of time-zones are supposedly to work, by looking up the mcc, and timezone, add on x minutes to the clock maintained by Android).

But that is in a nutshell, in how the Play store determines what to show for that intended audience based on their respective network. There are work-arounds available, by faking the carrier code is one, Market Enabler does that exactly that.

Please see the other answer that was posted in how to get-around the limitations and work-arounds.