You can make it return a figure instead:
#let figure-hung(..args, caption: "", source: "", body) = figure(
..args,
caption: caption,
body + context block(
width: measure(body).width,
)[
#set list(marker: "Source: ")
#show list.item: set align(left)
#show list.item: set par(justify: true)
#list.item(source)
]
)