You could also look at using Runtime Compiled C++, if all you want is C++-syntax that you can tweak at runtime
I guess I'm interpreting "I can call a C++ function from my main application in the script..." too stringently.
If wrapping is permitted, then almost any scripting language fulfills that requirement. If wrapping isn't permitted, than almost none do.
Most scripting language I've used require ~1 line of C++ code to 'register' a C++ function with the scripting environment, and IMO this is to be expected.
I've also used languages that parse your C++ headers and automatically build their own bindings, but these generally put restrictions on the way you write your headers, and make me feel dirty with their fragility and over-reaching nature.
The main difference with Lua's method of binding to C++ compared to other scripting libraries, like AngelScript, is that Lua doesn't supply an advanced registration system out of the box -- instead they give you the tools to write your own registration system, so you can either spend half a dozen lines of C++ to register each function yourself manually, or you can use a 3rd party Lua-binding library to reduce this to 1-line.
This is getting off-topic, but the Bitsquid engine chose not to use one of these Lua-binding systems at all, and instead use the manual method of writing their Lua bindings (half a dozen lines per function). Their rationale is that if you're writing the bindings yourself, then you're aware of any inefficiencies or quirks at the language boundary and you'll produce a better, and more Lua-styled, Lua-side engine API as a result, which I found to be an interesting bit of food-for-thought.
Personally I'd recommend Lua, even though it fails requirement #2 (and possibly #4 depending on how you personally feel about the manual binding API, and/or how you feel about 3rd-party binding systems). It's easy to write, is extremely fast (especially if you use LuaJIT instead of standard Lua) and the Tilde debugger is pretty cool.
</offtopic>