1) I believe you could use the ammo command to get how many rounds are left, but that will only work right if there is no ammo for the player to get and he doesn't change weapons. otherwise, use THobsons idea. In some units init line, you would need to put shotCounter = 0 and then in the script just have this line:
shotcounter = shotCounter + 1
exit
If you want to tell the player, then at the end you would need to exec another script with this in it:
_msg = format [%1,"%2",%3,"You used",shotCounter,"rounds"]
hint _msg
exit
not sure on that exactly
2) you could use a fired eventhandler:
sniper addeventhandler ["fired",{this exec "NoMoreShooting.sqs"}]
NoMoreShooting.sqs
disableuserinput true
~5
disableuserinput false
exit
that will stop the player from doing anything for 5 seconds after he shoots
if its in multiplayer you would need to add:
_shooter = _this select 0
?_shooter != player:exit
i think thats right, but not garunteed