This article can probably help you, briefly, you will need to set ContentService.RemoteAdministratorAccessDenied
setting to false.
PowerShell code (copy-pasted from the article):
$contentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$contentService.RemoteAdministratorAccessDenied = $false
$contentService.Update()
Nevertheless, I reckon, that creation of timer jobs by portal users is not a good idea anyway, despite of it's possible.
I'd recommend you to create one single timer job, which will run every minute (SPMinuteSchedule), and check for a value in web properties. If the expected value found - timerjob will clear this value, and do it's work. This approach is often used when controlling threads execution (known as "signaled threads").
So the point is, that user will not interact with timerjob directly. He will only set a value in web properties.
Also you can use farm properties instead of web properties, or other information storage, because web properties are actually not a very secure place to store data.