Can you reverse compile code from arduino boards?

You can set 'fuses' when you program the ATmega328p that will prevent anyone without special resources from seeing your code. You will not be able to change the sketch without using high-voltage serial programming to reset the chip to factory settings.