I am creating some content types programaticaly and have set the sealed flag to true which seems to prevent deletion by users and code. First how can it be deleted? Second, what is the proper way to create a content type that I don't want users to change unless it is done programaticaly?
You need to unseal the content type to delete or change it using the GUI, and you do that with Site Collection Adminstrator rights. In code you can change it if you have sufficient rights, as I understand it, at least contribute rights.
Reference: ContentType Element (ContentType)