Yeah for script reloading, the simplest solution is just bind your "load all lua scripts" function to a key, so you can call it again later.
You should be careful how you write your Lua code though, such that it can be executed multiple times without too many surpises.
E.g. Compare these two Lua files:
A)
foo = {}foo.blah = 42
B)
foo = foo or {}foo.blah = 42
(A) creates a new table containing an 'blah'=>42, and assigns it to the global variable 'foo'. If 'foo' already had a value, it is lost.
(B) only creates a new table if the global variable 'foo' doesn't already exist, and then assigns foo's member 'blah' to 42.
If 'foo' did already exist and contained other members, they will persist.
(B) is a more "reload friendly" coding style, as it's less likely to accidentally throw away game state when re-executing a Lua file :)
Little things like this might bite you arse from time to time.
For an IDE you really do want one that can integrate with your game, allowing you to catch errors, set breakpoints, step over code line-by-line, and inspect state.
Check out:
https://github.com/jjensen/lua-tilde
And:
http://unknownworlds.com/blog/lua-ide-decoda-open-source/
Should I use luaJIT?
If you're using Lua 5.1, you can switch to LuaJIT later with no changes required to your Lua code; it's a drop-in replacement :)
It's waaaaaay faster than regular Lua, but not as friendly for debugging when things go wrong.
I actually wonder about the utility of the patching feature -- and would want to see real world statistics about how frequently runtime code patching actually is done and how often the needed patch changes STILL required restarting everything anyway (the scripter has to consider/judge what the code change affects, as they can't patch all the related runtime data easily).
Imagine a simple tweaking GUI, where I can click on a slider to change the enemy's Hit Points during a battle, playing it over and over until it feels right.
Now picture the same thing, but instead of dragging a simple slider, I've got full control over all of their behaviours, priorities, pathfinding and animation code.
I can tweak any of that logic and see the results a second later. That means I can try out several AI tweaks per minute. If I have to quit the game and recompile, I can probably try out one iteration once per every several minutes :(
For iteration/tweaking type tasks, it's invaluable.
For bug-fixing type tasks, yeah it's less useful -- usually your game state is too invalid to continue even if you can fix it and reload. However, the dynamism of Lua is really useful in allowing you to enable/disable/hack code at runtime, to very quickly get the gamestate intoba situation where you can reproduce a bug you're looking for.