In Apple's system-lingo: "A daemon is a program that runs in the background as part of the overall system (that is, it is not tied to a particular user). A daemon cannot display any GUI; more specifically, it is not allowed to connect to the window server." (see Tech Note 2083) It doesn't have to be a continuously running program, just one that doesn't interact with users directly. Your script will probably work in either location, mind you, so the distinction might be academic.
All enabled plists are loaded at restart or login. Enabled plists are plists in one of the three user-accessible launchd folders (already mentioned) which are not explicitly disabled by a Disabled key set to true (it's actually a little more complicated than that - the Disabled key in the plist is 'advisory', and the system stores the real enabled list in an undisclosed location - but it usually works). You only need to use launchctl if you are manually updating a plist and don't want to log out, or sometimes in super-tricky cases where you want to programmatically load a plist (in those cases you set the plist's Disabled key to true so it doesn't load, and then script launchctl to load it by override the Disabled key with the -F or -w options. probably TMI). it is set-it-and-forget-it.
There's no simple utility for this, I think, because not that many people use launchd directly, and those few who do tend to write plists, toss them in the correct folder, and forget about them. I have a applescript I use for loading and reloading plists which I keep in the script menu:
on run
tell application "Finder" to set theItems to the selection as alias list
relaunchd(theItems)
end run
to relaunchd(theItems)
repeat with thisPlistFile in theItems
tell application "Finder" to set containerName to displayed name of container of thisPlistFile
if containerName is in {"LaunchAgents", "LaunchDaemons"} then
set thePath to quoted form of (POSIX path of thisPlistFile)
do shell script "launchctl unload " & thePath
do shell script "launchctl load " & thePath
end if
end repeat
end relaunchd
The difference between launchd and cron is that cron is (pardon me for putting it this way) a unix-geek tool: its language is highly compressed and symbolic. good for fast typing in a command-line environment, bad because a single mistyped character can become a major headache to diagnose and fix. Launchd (like many things Apple) is much more verbose and 'natural language'-like, which means a lot more typing but a generally more user-friendly experience (once you wrap your head around it). tradeoffs vs. tradeoffs.