The first problem (pasting) is difficult because that control is handled by our UI library, and it's very difficult to change it. Hopefully it's not too much of a problem.
The second issue (removing events when things they refer to are deleted) is by design. It is a very difficult problem to leave a condition or action that refers to something that has been deleted. Consider if in your example you did this:
- delete the 'sound' variable
- save the project, close and reopen it
- now the editor has an action with an expression referring to "Sound", but it has no idea what it is
- then you create a new object type called "Sound" - say, a Sprite or something unrelated to what it used to be
- the name of an object by itself is a syntax error, e.g. you can't just have the name "Sprite" as an expression. So now the action no longer refers to anything deleted, but is still invalid.
Another example would be to delete a number variable used in a number parameter, recreate it as a string variable, and then you have an invalid parameter because it's the wrong type. Currently the editor stops this by preventing you changing the type of variables that have any references in events, but deleting and recreating would work around this.
This is one of those ideas which is far more complicated than you probably imagine it to be. It creates an opportunity to create "valid" conditions and actions (ones that do not refer to anything deleted) which contain a syntax error. This is inconsistent with the rest of the editor, since you are not allowed to create a condition or action if any of its parameters are invalid. IMO this is a major advantage of the event system, since you know everything you're looking at is valid, and you avoid running in to syntax error/invalid code type problems that you get with traditional programming languages. So allowing a loophole to create invalid events seems like it would just make things worse.
IMO a better solution is to provide tools for reviewing the project, so you can find all references to an object or variable, and view a list of everywhere it's used. Perhaps this list could be shown before deleting anything with a message like "Note that deleting this object/variable will also remove the following places where it is used". Then you also have the opportunity to go and update all those locations, and safely delete the object/variable afterwards without other things disappearing.