SQL Server won't let you cascade like this, you'll need to use triggers. Here's an example of how to do deletes. Updates are left as an exercise to the reader if you really decide you need them.
Create Table AdjoiningStates (
State1ID int not null constraint FK_AdjoiningStates_States1 Foreign Key References States,
State2ID int not null constraint FK_AdjoiningStates_States2 Foreign Key References States,
Constraint PK_AdjoiningStates Primary Key (State1ID, State2ID)
)
Go
Create Trigger States_Delete On States Instead Of Delete As
Delete AdjoiningStates From AdjoiningStates a inner join deleted d on a.State1ID = d.StateID
Delete AdjoiningStates From AdjoiningStates a inner join deleted d on a.State2ID = d.StateID
Delete States From States s inner join deleted d on s.StateID = d.StateID
Go
On certain versions of SQL, if this is going to be a bottleneck, it's more efficient to copy the deleted table into a temporary table before using it multiple times.