Whatever's most amenable to encapsulation or is already well specified - and thus well encapsulated - in C++ classes / functions, i.e. exists behind a stable, solid interface.
Aspects that are ever-changing, and aspects that are coded at a low level and need fine control like rendering and low-level network code, are poor candidates for scripting. It depends on just how much control you need, and at just what level. Once the need for control and speed becomes too great, you'll gain little out of wrapping that logic in script, and in fact may stand to lose performance due to the overheads of making scripting calls, even with a nice fast scripting engine like LuaJIT.
Yes, all the things you list are good candidates, though again, you'll probably do some work on each front to improve your interface to the C++ that your relevant scripts will call into. Something like sound would be a nice, easy place to start. Start where your code is already most stable.