A simulator is something like Modelsim that you can compile your design and testbench and view what happens to the signals on a waveform on your PC.
The synthesizer creates the netlist and bitmap files that you program your PLD/FPGA with.
Any VHDL is valid for a simulator, but only a sub-set of VHDL can be used for synthesizing. Anything that doesn't describe digital logic cannot be written in synthesizable logic (or RTL).
for example this is not synthesizable, but if you were in a hurry you could conceivably do it in a testbench:
A <= '1';
wait for 10 ns;
A <= '0';
wait for 20 ns;
A <= '1';
wait for 10 ns;
A <= '0';
wait for 20 ns;
If you were to describe something like the above in RTL you would need a 100Mhz clock and one way to do it would be something like:
signal A : std_logic;
signal cnt : std_logic_vector(1 downto 0);
[ .. snip .. ]
-- asynchronous reset
if rst = '1' then
A <= '1';
cnt <= "00";
-- clock - rising edge
elsif clk'event and clk = '1' then
if (cnt = "01" and A = '1') then
A <= not A;
cnt <= "00";
elsif (cnt = "10"

and A = '0') then
A <= not A;
cnt <= "00";
else
cnt <= cnt + 1;
end if;
end if;
Note that I tend to use unsigned rather than std_logic_vector, I forget off the top of my head if I can do cnt <= cnt + 1 or if I need to do some conversions first.
--