Title says it all. I would attempt to code this if I could find anything on the internet but I didn't.
Yes, it's possible. But it's also an easy way to open up your game to server-side exploiting, and shouldn't be done on a production multiplayer game. For something like a single-player scripting tutorial type place, it would be OK.
Two ways you can do this are by enabling loadstring() with ServerScriptService.LoadStringEnabled = true (can be done from the Properties panel via the checkbox), or by linking in a Lua Interpreter ModuleScript. In either case, you can execute arbitrary strings sent from client to server, on the server as Lua code.
Code is executed on the server with loadstring like this:
loadstring(stringOfLuaSourceCode)(arguments)
arguments is optional. loadstring returns your code as a function, so just () will execute it.
No, the only way to access the source of a script is by it's Source property, however that property is locked to command bar and plugin usage. The only other way to dynamically change code at a runtime would be to use loadstring() and change the source of it everytime. However loadstring() does come with it's own set of security risks.
However the better way to do it is by using variables, specifically value objects declared outside of the script (or just simply internally) which can cause the behaviour of a script to change in several ways depending on the implementation.