GDScript is slower than C# but way better integrated because it was made from scratch for Godot, it's here from the beginning and interfaces more directly with the engine (i.e no marshalling, no extra GC and engine features like signals and pool arrays have a 1:1 match). It's also more stable due to this.
C# is faster (as far as Mono is) but was added more recently. It is less integrated (less integrable I even dare say) because engine features can't always map 1:1 with the language and its standard library, and might have some bugs. It also adds significant weight to the engine (a few megabytes) so it ships as an alternate engine version. Also, although C# is quite fast, it has an extra GC on top of Godot's memory management, so if you care about memory you should care about GC kicks too.
Both languages can communicate using the Godot introspection layer. For example, any language that can call a method can at least do so with
object.Call("MethodName", argument) for example.
You can load GDScript code from anywhere you want by creating scripts manually (
GDScript.new(), assign source code and call
reload), so you can use GDScript for modding to some extent. However, as it was said many times, the Godot scripting layer was not thought for sandboxing. That means any script you compile this way has the same access rights as your game code, and can access all Godot features including filesystem, network etc. so mods have to be entirely trusted if you go that way.