Hello there,
This question comes up from time to time.
A simple solution is to use a latching relay. That's a relay that when energized one way it latches in one direction, and when energized another way it latches in another direction. This holds the state for as long as the relay is not energized in the opposite way. The output contacts could be used to show the state, with a pullup resistor for example.
I like the microcontroller idea too. Many uC chips these days have non volatile EEPROM memory, so you could simply write instructions that program ONE bit in one EEPROM memory register, then later look it up to see what state it was. Since the number of writes might be limited to around 10K, that would mean that you should also use a counter to count the number of times the bit was written to, and switch to a different bit or different byte after say 5K writes. The counter would also take two bytes however, so you'd have to switch that after 5K writes too. So with a 128 byte EEPROM that would mean 320K operations would be possible. If that's not enough you might move to an external EEPROM with a huge number of bytes and that should get you up to millions of write cycles.
A little bit of an overkill though
Another idea is to build a cell that takes very very little battery power to keep alive. This is possible today with low power CMOS. A small battery like a 9v alkaline battery could keep the data stored for years in that one bit or multiple bits.
This is also possible with the microcontroller, where the uC is put into sleep mode and woken up only once every 10 seconds (or whatever) just to check for a change in input. The average power needed for this is extremely small and AA alkaline batteries (at least 2 to get at least 2.5v) last for 2 years.