It's because the date returned is a complex data type.

If you cast it to a simple data type (using CStr() in this example) then it'll come back in a usable form.

I've added a simple FormatDateTime(), as you missed it in your post. I've also collapsed the Chr()s, as they were giving me a headache
 Code:
Function FormatDateTime($v, $f)
    Dim $sc, $result
    $sc = CreateObject("ScriptControl")
    $sc.Language = "vbscript"
    $result = $sc.Eval('FormatDateTime("'+$v+'",'+$f+')')
    $sc = 0
    $FormatDateTime = $result
EndFunction
Function DateDiff($unit, $date1, $date2)
    Dim $sc, $result
    $sc = CreateObject("ScriptControl")
    $sc.Language = "vbscript"
    $result = $sc.Eval('DateDiff("'+$unit+'", "'+$date1+'", "'+$date2+'")')
    $sc = 0
    $DateDiff = $result
EndFunction

Function DateAdd($unit, $incr, $date)
    Dim $sc, $result
    $sc = CreateObject("ScriptControl")
    $sc.Language = "vbscript"
    $result = $sc.Eval('CStr(DateAdd("'+$unit+'", ' + $incr + ', "'+$date+'"))')
    $sc = 0
    $DateAdd = $result
EndFunction

Function DatePart($unit, $date)
    Dim $sc, $result
    $sc = CreateObject("ScriptControl")
    $sc.Language = "vbscript"
    $result = $sc.Eval('CStr(DatePart("'+$unit+'", "'+$date+'"))')
    $sc = 0
    $DatePart = $result
EndFunction

$testvalue = '2009/11/03 12:34:56'

$test1 = FormatDateTime($testvalue, 'vbShortDate')
$test2 = FormatDateTime($testvalue, 'vbLongDate')
$test3 = FormatDateTime($testvalue, 'vbLongTime')
$test4 = DateDiff('d', '7/19/2009', $testvalue)
$test5 = DateAdd('m', 1, $testvalue)
$test6 = DatePart('m', $testvalue)

? "shortdate...: $test1"
? "longdate....: $test2"
? "longtime....: $test3"
? "datediff....: $test4"
? "dateadd.....: $test5"
? "datepart....: $test6"


This gives me:
 Quote:
shortdate...: 11/3/2009
longdate....: Tuesday, November 03, 2009
longtime....: 12:34:56 PM
datediff....: 107
dateadd.....: 12/3/2009 12:34:56 PM
datepart....: 11


Which is what you want, I think.