There are two elements here.
First, AppleScript is, indeed, waiting for the process to finish before ending itself, so the first step would be to have AppleScript not wait for the process to end and return control immediately.
In order to do that you need to add some addition elements to the shell command, specifically " > /dev/null 2>&1' before the trailing &, like:
<pre class=command>do shell script "/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.a pp/Contents/MacOS/ScreenSaverEngine -background >/dev/null 2>&1 &"</pre>
These additional elements suppress the output of the command (which you don't care about anyway) and allows AppleScript to continue while the shell command continues to execute in the background.
For the kill element there is an additional part,
echo $!, you can use that returns the PID of the command just executed. You can store this and use it later to kill the process.
This example launches the screensaver for one minute, then kills it.
set myPID to do shell script "/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.a pp/Contents/MacOS/ScreenSaverEngine -background &> /dev/null & echo $!"
delay 60
do shell script "kill " & myPID
You could also use
killall, but since this kills processes by name, not PID, you run the risk of killing other processes at the same time.