The issues you are having are with the understanding of what the Short Date() function returns. It does not return a JMP date value, which would be the number of seconds since 12:00am, January 1, 1904, but rather, it returns a literal string of the date part of a JMP date value. To illustrate this, the following JSL displays what Short Date() returns:
show(short date(today()));
and it returns
Short Date(Today()) = "12/03/2019";
And since in your JSL it returned a literal string, it changed the Date column to a character column.
Really, what you want is to use the DateMDY() function to create the date value.
Below is a reworked version of your code that does what I believe you need:
Names default to here(1);
dt_run = new table("data",add rows(1), new column("Date & Time",formula(today()),format("m/d/y h:m:s")));
dt_run << New Column( "Date", Numeric, Continuous, Format("m/d/y"));
Column( "Date") << set Formula( DateMDY(Month(:Name( "Date & Time" )),Day(:Name( "Date & Time" )),Year(:Name( "Date & Time" )) ) );
dt_run << New Column( "Time", Numeric, Continuous, Format("h:m"));
Column( "Time") << set Formula( Time Of Day( :Name( "Date & Time" ) ) );
Jim