I think that would be a good idea, because it would keep UDTs behaving as a struct/value type (the term depends on your language I guess).
As for the pointer issue, I think it'd be nice if we could do a reference type system:
REFERENCETYPE playertype
score AS INTEGER
ENDTYPE
airslide AS playertype
airslide = CREATE(playertype)
addpoints(airslide)
Print(airslide.score)
DELETE(airslide)
FUNCTION addpoints(player AS playertype)
player.score = player.score + 5
ENDFUNCTION
Note the explicit REFERENCETYPE. That would be key so that you don't accidently mix n' match and so that the compiler knows that 'playertype' variables need to be treated as pointers.
EDIT: Come to think of it, I think that whole feature could probably be created with the existing language features, just with a little preprocessing so it amounts to syntatic sugar. The above could be translated into this:
DIM playertype_HEAP[100] as playertype
TYPE playertype
alive AS INTEGER
score AS INTEGER
ENDTYPE
airslide AS INTEGER
airslide = CREATE_playertype()
addpoints(airslide)
Print(playertype_HEAP[airslide].score)
playertype_HEAP[airslide].alive = 0
FUNCTION addpoints(player AS INTEGER)
playertype_HEAP[player].score = playertype_HEAP[player].score + 5
ENDFUNCTION
FUNCTION CREATE_playertype()
index AS INTEGER
repeat
index = index + 1
until playertype_HEAP[index].alive = 0
playertype_HEAP[index].alive = 1
ENDFUNCTION index
So it's just an index to a global array (obviously a robust solution requires a little more work towards array size and such). It realy just amounts to an easier way to use what I think a lot of people already do in DBP. Notice the "compiler"'s addition of the alive flag, the create function and the "heap" array. Where ever the UDT fields are accessed it replaces it with the array lookup, otherwise it is thrown around as an integer.