[edit(2012-09-28)]
Ok, i finally found the problem. It is possible to have MonoBehaviours in an external DLL and load it dynamically at runtime. The problem was the namespace. Usually when you create a dll it uses it’s own namespace. When you import such a dll into a Unity project the namespace seems to disappear and Unity just grabs all MonoBehaviour classes it can find in the dll.
When you load the dll at runtime Unity has problems to “find” the classes inside the assembly. You can get the System.Type object of your class, but AddComponent will complain it can’t find the class.
The solution is: Just remove the namespace when you build your DLL. put all classes into the global namespace and it will work 
After you’ve loaded the assembly you have to retrieve the System.Type object for your class and use it in AddComponent.
Note: AddComponent with a string parameter won’t work unless you added the component at least one time with the Type-object. After that the MonoBehaviour is known to the system and the string version works as well, but not for the first time.
Since it is possible to directly load MonoBehaviour derived classes from an assembly my old answer becomes almost useless 
[/edit(2012-09-28)]
You can’t have MonoBehaviours in an external dll. MonoBehaviours have to be registered in the AssetDatabase.
It’s fine to load “normal” classes that way. On this basis i developed my own “plugin” interface. Something like that:
public class Plugin
{
public MonoPlugin container;
public virtual void Awake() {};
public virtual void Start() {};
public virtual void Update() {};
//[...]
}
This interface should be in a common dll which is used by your plugin dll and your actual project. Now just create a MonoBehaviour in your project that implements all unity function your plugin interface needs and call the interface functions from your plugin object:
public class MonoPlugin : MonoBehaviour
{
public Plugin plugin;
void Start()
{
plugin.Start();
}
void Update()
{
plugin.Update();
}
//[...]
}
Now you can create an extension method for GameObject and / or Component which allows you to add a MonoPlugin:
public static class MonoPluginExtension
{
public static Plugin AddPlugin(this GameObject aObj, System.Type aPlugin)
{
MonoPlugin MP = aObj.AddComponent<MonoPlugin>();
Plugin P = (Plugin)Activator.CreateInstance(aPlugin);
MP.plugin = P;
P.container = MP;
// Awake can't be wrapped since it's called within AddComponent
P.Awake();
return P;
}
}
Finally you can derive your plugins from Plugin and put them in an external dll. Hopefully Unity will support using MonoBehaviours directly the other day.
ps: I’ve written that just from scratch. So no syntax checks. It’s just a prove-of-concept 
Hi, that is incorrect - as I said the MonoBehaviour from the dll in fact work in the original project! It is when I export it to a bundle and try to load the dll via reflection in the project which loads the bundle before loading the bundled scene then even though the dll loads and I can use GetType from the assembly and manually AddComponent, the scripts from the bundled scene won't recognize they were loaded via reflection and send debug warning for missing reference as I mentioned above.
– Shanee22Ok, so there is no way for me for example to have the scripts inside Unity so I can set parameters individually? For example what if I have a path finding script for an NPC, or something else specific, that won't be good for it then,m will it? As I need to have it all self initializing in the Start() etc..? Or is there a solution for inputting the variable values somehow?
– Shanee22Actually code is most the time the smallest part of your game. Loading external code is usually only required when you want to provide some kind of update interface. Loading parts of you code from an external source to reduce the game size is pretty much useless. My Test project for UnityAnswers contains around 100 scripts and some are quite complex. The created assembly is just 120KB. As already said, code makes up the smallest part of your game, that's why it's much better to use AssetBundles for assets ;)
– Bunny83