X AND Y Directions in this Script
Here is a proposal for the first question, without using the matrix conversion (not sure why it's necessary there?). Does it work for you?

import bpy
from bpy.props import FloatProperty
from mathutils import Vector, Matrix, Quaternion, Euler
from math import degrees, radians

class HelloWorldPanel(bpy.types.Panel):
    """Creates a Panel in the Object properties window"""
    bl_label = "Hello World Panel"
    bl_idname = "OBJECT_PT_hello"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "object"

    def draw(self, context):
        layout = self.layout

        obj = context.object

        row = layout.row()
        row.label(text="Active object is: " + obj.name)
        row = layout.row()
        row.prop(obj, "name")

        row = layout.row()
        row.prop(obj, "rotate_x")
        row.prop(obj, "rotate_y")
        row.prop(obj, "rotate_z")


def get_rotation_z(self):
    return self.rotation_euler[2]

def get_rotation_x(self):
    return self.rotation_euler[0]

def get_rotation_y(self):
    return self.rotation_euler[1]


def set_rotation_z(self, value):
    self.rotation_euler[2] = value

def set_rotation_y(self, value):
    self.rotation_euler[1] = value

def set_rotation_x(self, value):    
    self.rotation_euler[0] = value

def register():
    bpy.types.Object.rotate_x = FloatProperty(name="Rotation X",
            description="Rotate object.",   
            get=get_rotation_x,         
            set=set_rotation_x,
            unit='ROTATION')
    bpy.types.Object.rotate_y = FloatProperty(name="Rotation Y",
            description="Rotate object.",      
            get=get_rotation_y,            
            set=set_rotation_y,
            unit='ROTATION')

    bpy.types.Object.rotate_z = FloatProperty(name="Rotation Z",
            description="Rotate object.",
            get=get_rotation_z,                 
            set=set_rotation_z,
            unit='ROTATION')

    bpy.utils.register_class(HelloWorldPanel)


def unregister():
    del bpy.types.Object.rotate
    bpy.utils.unregister_class(HelloWorldPanel)


if __name__ == "__main__":
    register()