Programming options other than C++
In theory, any compiler which outputs AVR assembly could be used (modulo limitations on code size, ram usage etc). 

AVR backends exist for both LLVM and  GCC -- so in theory, with some effort, most languages which are supported by LLVM and GCC's front-ends could be compiled to AVR. A big question will be library support, etc. 

Never the less, here's a couple of odd choices for the spirit of the question, rather than its letter [1]. 


AMForth, a forth dialect can be flashed onto an Arduino. 
AVR-Ada: Ada for AVR micro-controllers. 
BASIC: Bring back the Goto!


Oh, and you could write raw AVR Assembly! 

[1]- I Haven't tried these though!