Lets start by explaining what the DLR allows you to do, first:
There are two facets to the DLR the first is that it allows dynamic binding of objects at run time.
For example:
class A
{
public int SomeProperty { get; set; }
}
class B
{
public int SomeMethod(int value)
{
return value;
}
}
dynamic d = new A();
d.Value = 1;
d = new B();
d.SomeMethod(2);
The dynamic d can be assigned objects of any type and call their methods and properties. A more striking example:
int CallSomeMethod(dynamic d)
{
return d.SomeMethod();
}
This works with any class that has a method "SomeMethod" returning an int. The strong typed way to do this would be create an interface with "SomeMethod":
int CallSomeMethod(IClassWithSomeMethod d)
{
return d.SomeMethod();
}
Note that this is not something which could not be done before with reflection, but the DLR and the dynamic keyword makes this much simpler. The DLR also creates and caches expression trees for the calls so using the DLR is almost always more efficient than reflection.
The real strength of the DLR however is not just run time binding, it actually allows you to create objects that behave dynamically. Basically it lets you to specify what happens when you call a method or property that does not exist in the actual runtime object bound to the dynamic variable. This allows the CLR to be used for dynamic languages and to provide easy interoper with dynamic langues , create easy to use parsers which can represent a DOM as a dynamic object or ORM's that can represent ad-hoc queries as objects, etc..
More detailed information about the DLR can be found in its codeplex project documentation page. Especially worthwhile are the overview and the Sites, Binders, and Dynamic Object Interop Spec documents.
Now to your questions:
Question 1: No you can't interact by magic with any dynamic language, there must be some supported interop (which may be facilitated by the DLR) to do so (I don't know what you meant by Pascal dll.)
Question 2: ScriptObjectClass uses the DLR facilities (by extending DynamicObject) to get and set the Count property dynamically as if it was an actual property of ScriptObjectClass (if you're curious see Sites, Binders, and Dynamic Object Interop Spec for exactly how this is done.)