Hi!
Yes, you can have any lv_* objects as local variables, as:
lv_obj_t* label variable in your aaa() function is just a pointer in stack memory
lv_label_create() function allocates the memory needed for label (in heap), and returns the pointer to that memory space
lv_obj_class.c adds the newly created label (pointer) to parent’s (button) children list, so when the button (or one of it’s parents) will be deleted, then LVGL will implicitly call all children delete function, and memory (in heap) will be deallocated