How do I output user_registered time in my correct timezone?

You can get the time offset from WordPress Settings using

get_option( 'gmt_offset' )

So I found the easiest method is to do this:

gmdate( 'Y-m-d H:i:s', strtotime( get_option( 'gmt_offset' ) . ' hours', strtotime( $udata->user_registered ) ) )