The difference between SQLExpress and SQLCE is that SQLCE is just a file, and SQLExpress is actually SQLServer "lite". By this, I mean that you can move around the SQLCE database and put it wherever you want and just set the connection string appropriately. As I understand it, with SQLExpress, it is attached to a running service on the machine, so you can't move it. (I'm trying to figure out if I can detach it and reattach it, but I'm fairly certain a ClickOnce app won't have the privs to do this).
You can deploy SQLCE by just including the DLL's, you don't have to install it as a prerequisite, which makes deployment about a hundred times easier. This also gives you complete control over the dll's and what version you are using, rather than being at the whim of whoever has the computer. And as noted above, you can move the file around. Backups? Pfui! Just copy the dang file.
SQLExpress has more features. So if you need those features, then that's the way to go. If I could get away with SQLCE, that's what I personally would use.
The only downside to scripting your database is if you want to deploy a new one, you have to write all of the changes in script and have the application apply them. In most cases, I'd think that was okay. But if you added a bunch of tables, it might be a pain.
I think you can create a SQLCE database on the fly using a script, but I can't swear to that. You'd have to try it. On the bright side, it wouldn't require any elevated permissions because you don't have to attach it to a running SQLServer, which seems like it would be the case with SQLExpress.
That's my two cents'.
RobinDotNet
Click here to visit my ClickOnce blog!